1.分包
发送方发送字符串“helloworld”,接收方却接收到两个字符串"hello"和"world"
2.粘包
发送方发送两个字符串"hello"+“world”,接收方却收到一个字符串"helloworld"
TCP保证:
- 顺序不变,例如发送方发送hello,接收方也一定顺序接收到hello。
- 分割的包中间不会插入其他数据
3.解决方法
解决办法是自定义一份协议,最常用的方法是:
报文长度+报文内容
报文长度用ascii码或者二进制的整数
报文长度为4字节的整数,表示的是报文内容,不是整个tcp报文的长度,整个TCP报文的长度是报文内容的长度+4.
报文长度是4字节的整数,是以二进制的方式写入socket,不是ascii码。