服务器使用tcp协议给客户端发送了3092字节的数据,我在客户端使用一个3092字节的结构体进行接收,为什么有时候一次性接收的
不到3092字节,也就是需要分两次接收才能接收完整,比如第一次接收2000,第二次再接收1092字节,按照ip分包,MTU=1500,超过1500字节他就会在ip层分包,但是他会在接收端组包,再交付给上一层,所以按道理不会出现这种问题,有哪一位大神能指导一下么?万分感激。。。
你是在tcp层,只会还原一个个包,但不会自动组合你发送的整个包,他不会给你组装好,需要你自己组装,自己定义结构体等,里面含一个大小字段。
tcp是流式协议,只会保证你能把数据发送和接收完,但是不能保证数据分几次发送或接收,才能接全。
TCP大数据包通常被分片了,一般都是先发送一个大小字段,在发送数据,接收端收到大小后,循环接收数据直到数据完全。
我做这个问题是先会在字节前面拼个字节长度。比如我要发生一个3092个字节长度的数据。我会这样3092***........。这样服务端在解析的时候先
获取前面4位数得到长度。再接收。
在TCP层会切割成报文段,不能保证顺序传递,重组靠序列号,窗口大小不够的话无法一次传完
服务器使用tcp协议 ? 我觉得这里有问题, SOCKET么?
分包是在IP层,但到传输层应该会自动组包的。 也就是说在传输层或以上发送出去一次,在传输层或以上也就接收一次。
但你在IP层或以下接发就存在乱序了。