TCP客户端发送数据很大,服务端接收时被拆分成多条,应该如何处理成一条?

lsqpy

客户端发送数据如下:
截图

服务端接收数据如下:
截图

请问服务端应该如何组装数据,或者说怎么处理成一条

4068 1 0
1个回答

walkor

TCP有两个特点:
1、基于流式传输(分片传输)
2、数据数据流没有边界

根据特点1,数据大于某个值(1.4k左右)就会被分片,所以基于TCP传输时你收到数据的时候就是一段一段的。
根据特点2,由于没有边界,没有办法知道收到当前这一段数据是否是最后一段,只能通知业务自行判断。所以业务与服务端要定一个通讯协议,一般是把整个包的大小写到某个位置,例如http协议里post请求的数据大小一般放到http头里的content-length字段里。

正是由于以上两特点,所以才在TCP基础上产生了那么多的通讯协议,例如http、smtp、websocket、ftp、mqtt等等。通讯协议的作用就是从分段传输的数据中计算出请求长度,并把数据流里的完整请求组装拆分出来。

所以你要做的就是采用某种通讯协议来传输你的数据。
参考手册
http://doc.workerman.net/protocols/why-protocols.html
http://doc.workerman.net/protocols/how-protocols.html
http://doc.workerman.net/protocols/example.html

  • 暂无评论
年代过于久远,无法发表回答
🔝