码迷,mamicode.com
首页 > 其他好文 > 详细

什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?

时间:2019-12-16 09:50:25      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:soc   二次   根据   解决   是什么   时间   span   字节   sock   

只有TCP有粘包现象,UDP永远不会粘包!

粘包
:在接收数据时,一次性多接收了其它请求发送来的数据(即多包接收)。如,对方第一次发送hello,第二次发送world,
   在接收时,应该收两次,一次是hello,一次是world,但事实上是一次收到helloworld,一次收到空,这种现象叫粘包。 原因 粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。 什么情况会发生
1、发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据很小,会合到一起,产生粘包) 2、接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)

解决方案:

一个思路是发送之前,先打个招呼,告诉对方自己要发送的字节长度,这样对方可以根据长度判断什么时候终止接受。








什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?

标签:soc   二次   根据   解决   是什么   时间   span   字节   sock   

原文地址:https://www.cnblogs.com/Rivend/p/12047330.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!