分段发送字符串的问题,接收的数据为啥是有序的

来源:6-8 对于聊天室功能实现若是使用UDP来是否会更好?

慕粉1710545776

2022-03-26

老师:我发现你在设置的IoArgs类中的ByteBuffer 分配的字节数五个,如果客服端发送了200 个字节,在第一次发送一个Packet 就会告诉total 的总长度是200 ,然后,channel 一次读取5个字节,一直循环调用读取完着200个字节,在接收的时候,分了有40个段,每段只是5个字节,在网络传输过程中,接收为啥没有错乱了,其实文件拆分也是一样的原理,拆分了,还要合并,这么保证还和原来的文件一模一样了

写回答

1回答

Qiujuer

2022-03-28

保证顺序收发就行呀,TCP本身是保证在单线程下是有序的;所以我们只需要保证在发送端每次发送均为有序发送(一个线程);在接收端也是一样虽然是多线程并发,但是实际上每次处理channel的时候仅仅只会有一个线程去从网络中读取数据。


然后再放到后续的处理队列中,而处理队列也是有序的处理,所以整体不会出现乱掉的情况。

0
2
Qiujuer
回复
陈佳凯
如果是TCP丢了,那就是TCP有异常,会直接抛出异常;如果是UDP则会出现丢的情况,这种时候需要自己去做校验,按最小包的方式校验,不合格则丢弃要求重发。
2022-08-30
共2条回复

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2314 学习 · 476 问题

查看课程