特定图像(.bmp)的TCP客户端失败

特定图像(.bmp)的TCP客户端失败,c,sockets,tcp,wireshark,tcpdump,C,Sockets,Tcp,Wireshark,Tcpdump,我有一个简单的c程序,可以使用TCP从服务器复制图像 问题是它总是无法处理某些图像,它只接收“x”字节,然后超时 这个程序不是这里的问题,因为我尝试过使用TCP使用不同的程序(C和python使用更大的recv缓冲区),但它们仍然在第x个字节失败 server: vxworks client: linux 如果我尝试使用相同的代码从SUN客户端连接,那么它在接收图像时没有问题。我做了一些数据包嗅探,发现我的客户机正在请求数据包“a”,其中包含第x个字节。服务器发送或重新传输,但客户端从未确认

我有一个简单的c程序,可以使用TCP从服务器复制图像

问题是它总是无法处理某些图像,它只接收“x”字节,然后超时

这个程序不是这里的问题,因为我尝试过使用TCP使用不同的程序(C和python使用更大的recv缓冲区),但它们仍然在第x个字节失败

server: vxworks 
client: linux
如果我尝试使用相同的代码从SUN客户端连接,那么它在接收图像时没有问题。我做了一些数据包嗅探,发现我的客户机正在请求数据包“a”,其中包含第x个字节。服务器发送或重新传输,但客户端从未确认,最终超时

问题是为什么这个图像是特定的?并且只在linux客户端上发生?


写入客户端的文件总是“x”字节长

对我来说,这似乎是网络问题。包的大小是多少?听起来很奇怪,但这难道不是服务器和linux之间的MTU黑洞吗

我的朋友有一次遇到了完全相同的问题,结果是他传输的二进制图像的有效负载在途中触发了过滤路由器中的一个bug。当一个特定的字节序列通过时,路由将直接断开连接。奇怪但真实。

如果数据为1460,则大小为1514。。。但为什么只有这一形象而不是其他形象会失败呢?失败与这一形象之间一定没有任何联系。简单地说,如果没有指定预期字节数的协议层,您就无法可靠地“传输”任意大小的数据。这可能是有意义的,因为SUN对其进行的切片与Linux机器不同。。。当使用linux时,这个特定的字节序列只在TCP数据有效负载的末尾出现,即数据包客户端不断请求并超时…您知道导致这种问题的系统细节或字节序列吗?早在2000年左右,HP PC上就出现过类似的情况。死亡位图-如果保存到磁盘,将在Windows上引发BSOD。