请稍等 ...
×

采纳答案成功!

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

关于stream会不会存在粘包的疑问

老师您好,已经知道的是,由于channel是要使用buffer的,而buffer往往有大小限制的,例如256,如果读取的消息大小为200,则会存在粘包问题。但如果用stream的话,例如 : String str = dis.readUTF();dis为DataInputStream,那么会存在粘包问题吗,如果会的话,又是为什么呢

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

1回答

Qiujuer 2021-02-05 10:48:45

粘包与使用channel还是stream没有关系。

粘包是业务层面的错误,简单来说是指:对方发送多份数据,但数据与数据之间没有用以区分的手段,则接收方可能收到多份数据揉杂的数据,这就是粘包。

比如发送方想发送:"A" "BD" 

那么接收方可能收到:“ABD”

虽然数据都不变,但其业务含义就变了,对于接受来说就是一条数据,而对于业务来说应该是2条数据。

解决这个问题最简单的办法就是加描述信息,比如:

发送方:“A\n”"BD\n"
接收方:“A\nBD\n”

虽然接收方也是收到的一个组合体,但是只要两边约定好了都是使用“\n”作为分割,那么则可以将其分开得到最原始的2份数据。


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号