关于TCP的粘包问题

一.TCP是一种基于流,面向连接,可靠,全双工的协议。数据通过TCP连接以数据流的方式传输,流没有边界限制。和UDP不同,UDP是个基于数据报协议,两段数据间有界限,一次接收一个完整的数据包。

二.在通过TCP传输数据时候可能会出现"粘包"的情况。比如,当客户端连续给服务器端发送两条信息A、B。正常情况下服务器端应该在第一次接收到信息A,第二次接收到信息B。但是此时服务器端第一次没有接收到信息,然而第二次一次性接收到两条消息A,B。这种情况就是"粘包"。

为什么会出现这种情况呢,"粘包"可发生在发送端也可发生在接收端。如可能是接收端接收不及时,首先TCP会把接收到的数据存在自己的缓冲区中。当应用需要处理其他的资源时没有来得及及时去缓冲区提取数据时,此时缓冲区中就会存在多条未提取的数据,所以当应用提取数据时,一次性就拿到了两条。

解决方法:可以通过客户端和服务器端定长的方式解决。规定客户端每次发送固定长度数据,不足以空字符填充,服务器端指定接收固定长度数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值