首页 > 其他 > 详细

Socket通讯中的粘包问题及处理方案

时间:2014-02-14 22:45:27      阅读:371      评论:0      收藏:0      [点我收藏+]

                                                Socket通讯中的粘包问题及处理方案

1、TCP提供的是一种面向连接的,可靠的字节流服务,没有消息边界,所以会产生粘包问题。

bubuko.com,布布扣

当出现如下情况时会出现粘包情况:

1、当应用程序发送缓冲区大于套接口发送缓冲区。

2、由TCP传递给IP的报文段大于MSS时。

3、当网络层向网络接口层发送的数据包大小超过MTU

 

例如:两个主机HostA和HostB,主机A向主机B发送M1和M2两个数据包。则主机B接收数据包时出现的如下情况:

bubuko.com,布布扣

情况一:M1和M2,分别接收完.

情况二:M1和M2一次性接收完.

情况三:先接收M1和M2的一部分M2_1,再接收M2的另一部分M2_2.

情况四:先接收M1的一部分M1_1,再接收M1的另一部分M1_2.和M2

情况。。。。。

 

2、粘包的解决方案

本质上是要在应用层维护消息与消息的边界


方式一:定长包。有可能增加了网络的负担,例如:如果定义的发送缓冲区是100个字节,而要发送的数据是10个字节,则每次都   得发送100个字节。


方式二:包尾加\r\n(ftp)。如果数据包中含有\r、\n,则需要进行转义等操作。


方式三:非定长的数据包。即包头加上包体长度,这样可以先接收包头(含有数据包长度),再接收包体,有效的降低了网络的负担
方式四:更复杂的应用层协议。


 

Socket通讯中的粘包问题及处理方案

原文:http://blog.csdn.net/zfs_kuai/article/details/19109479

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!