Socket 粘包和分包问题
Socket 粘包和分包问题
版权声明:本文为许佳佳 233原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
概念
粘包:
当发送的字节数据包比较小且频繁发送时,Socket 内部会将字节数据进行粘包处理,既将频繁发送的小字节数据打包成 一个整包进行发送,降低内存的消耗。
分包:
当发送的字节数据包比较大时,Socket 内部会将发送的字节数据进行分包处理,降低内存和性能的消耗。
例子解释
当前发送方发送了两个包,两个包的内容如下:
123456789
ABCDEFGH
粘包情况
123456789ABCDEFGH
1
分包情况
12345
6789
ABCDE
FGH
1234
处理方式
1.
2.
1. 给数据包的头尾加上标记。
上边两个包的例子就可以如下:
START123456789END
STARTABCDEFGHEND
12
2. 在数据包头部加上内容的长度
上边两个包的例子就可以如下:
PACKAGELENGTH:0009123456789
PACKAGELENGTH:0008ABCDEFGH
12
处理示例
头尾标记处理
粘包
START123456789ENDSTARTABCDEFGHEND
1
分包
START1234567
89END
12
头部长度处理
粘包
PACKAGELENGTH:0009123456789PACKAGELENGTH:0008ABCDEFGH
1
分包
PACKAGELENGTH:0009123456
789
12
部分细节情况
1、粘包和分包问题一起出现
START123456789ENDSTARTAB
CDEFGHEND
12
2、头尾标志由于分包获取不完整
START123456789E
ND
修改于 2024-12-23 07:53:28