请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

正在回答 回答被采纳积分+3

1回答

Qiujuer 2022-03-28 14:36:59

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


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

0 回复 有任何疑惑可以回复我~
  • 如果传输过程中丢了中间一个,那接收的时候拼不出来呢
    回复 有任何疑惑可以回复我~ 2022-08-30 16:31:08
  • Qiujuer 回复 陈佳凯 #2
    如果是TCP丢了,那就是TCP有异常,会直接抛出异常;如果是UDP则会出现丢的情况,这种时候需要自己去做校验,按最小包的方式校验,不合格则丢弃要求重发。
    回复 有任何疑惑可以回复我~ 2022-08-30 19:38:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信