采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师您好,已经知道的是,由于channel是要使用buffer的,而buffer往往有大小限制的,例如256,如果读取的消息大小为200,则会存在粘包问题。但如果用stream的话,例如 : String str = dis.readUTF();dis为DataInputStream,那么会存在粘包问题吗,如果会的话,又是为什么呢
粘包与使用channel还是stream没有关系。
粘包是业务层面的错误,简单来说是指:对方发送多份数据,但数据与数据之间没有用以区分的手段,则接收方可能收到多份数据揉杂的数据,这就是粘包。
比如发送方想发送:"A" "BD"
那么接收方可能收到:“ABD”
虽然数据都不变,但其业务含义就变了,对于接受来说就是一条数据,而对于业务来说应该是2条数据。
解决这个问题最简单的办法就是加描述信息,比如:
发送方:“A\n”"BD\n"接收方:“A\nBD\n”
虽然接收方也是收到的一个组合体,但是只要两边约定好了都是使用“\n”作为分割,那么则可以将其分开得到最原始的2份数据。
登录后可查看更多问答,登录/注册
理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选
3.3k 1
2.3k 7
2.1k 5
2.5k 13
1.5k 13
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号