程序运行环境linux。
在一个tcp链接中,服务器端要个客户端发送数据。
假设,第一次收到的数据包大小为1448,第一个数据包包含总数据的大小(一张图片的大小640*480的数据量),假如获得的数据大小总共为18284,
第二次,第三次等获得的数据包大小
recv_num = 1448
recv_num = 1448
recv_num = 2000
recv_num = 2000
recv_num = 344
recv_num = 1448
recv_num = 1448
recv_num = 1448
recv_num = 1448
recv_num = 1448
recv_num = 2000
recv_num = 392
这是我在应用程序read(sock_fd, re_buf, 2000)获得的数据包。
就是在应用程序读取最后一个数据包时,他却把下一帧的数据包跟这392个字节一块读出来了,导致上一张图片数据不完整。
可是我用wireshark在底层获得的数据包,每次都是1448,就是最后一帧为392,没发现底层出现数据重组的现象(即把最后一帧跟下一张图片的第一帧放一块发送给客户端的)。
可是在应用层,他却把上一张图片数据的最后一帧跟下一张图片的数据第一帧跟重组了,发给了应用层即read函数。
此现象是随机出现,而且不频繁出现。
这是为什么啊? 初次搞tcp,希望有人给些见解~~