socket 粘包 处理

Tcp协议socket 编程 中必然会产生粘包

什么是粘包? 粘包是怎么产生的? 如何解决?

粘包是指发送端连续两次以上send(发送)的包被远程端一次接收
如果recv 那么会发现 前后包连在一起

怎么理解远程端一次接收呢?

一般接收时会有一个缓冲区 ,例如: byte[1024]
以python为例

bytes1= socket.recv(1024)  #第一次
# 期间 第一次接收的数据正在处理,
# 客户端又连续发送了多次数据,而且每次发送的数据小于 1024,
bytes1= socket.recv(1024)  #第二次 

那么第二次接收的数据 就会产生粘包

必须通过定义双方的收发协议 才能解决粘包

解决之道在于规定每次发送的帧包格式 ,也就是协议
如:
最简单规定 :一帧= 帧包长度+字节数据
每次接收时,根据帧包长度 ,解析帧包, 取出字节数据
这样就可以避免粘包了

你可能感兴趣的:(编程,socket,网络)