2012-04-20 123 views
0

我有一个简单的C程序将图像从使用TCPTCP客户端无法

问题是,它总是失败,某些图像处理的服务器进行复制,它仅接收“× '字节然后超时。

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

server: vxworks 
client: linux 

,如果我尝试使用相同的代码从SUN的客户端连接,它有没有问题,接收图像。我做了一些数据包嗅探,发现我的客户端正在请求包含'x'字节的数据包'A'。服务器发送它或重新发送它,但客户端永远不会确认它并最终超时。

问题是为什么这个图像特定?只发生在Linux客户端?

写入到客户端的文件始终是“X”个字节长

回答

1

它看起来像网络的问题,对我来说。包的大小是多少?听起来很奇怪,但不可能是服务器和Linux之间的MTU黑洞?

+0

大小如果1514与数据1460 ...但为什么只失败这个特殊的形象,而不是其他人? – maheshg 2012-04-20 21:23:52

+0

特别是在失败和该图像之间必须没有连接。简单地说,如果没有指定预期有多少字节的协议层,则无法可靠地“传输”任意大小的数据。 – ShinTakezou 2012-04-20 21:52:54

1

我的朋友曾经遇到过这个完全相同的问题,结果证明他所传输的二进制映像的有效载荷在过滤路由器中沿途触发了一个错误。当一个特定的字节序列通过时,路由将会丢弃连接。奇怪而真实。

+0

这可能是有道理的,因为SUN的切片与Linux的切片不同......这种特殊的字节序列仅在TCP数据有效载荷结束时才能看到,这是数据包客户端不断请求并超时的原因。 – maheshg 2012-04-20 22:00:14

+0

你知道系统细节或引起问题的字节序列么? – maheshg 2012-04-20 22:10:08

+0

在2000年左右在HP电脑上看到类似的东西。死亡位图 - 如果保存到磁盘上,会导致Windows上出现BSOD。 – 2012-04-20 22:56:54