【问题标题】:TCP client fails for a particular image(.bmp)TCP 客户端针对特定图像 (.bmp) 失败
【发布时间】:2012-05-02 11:25:21
【问题描述】:

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

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

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

server: vxworks 
client: linux

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

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

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

【问题讨论】:

    标签: c sockets tcp wireshark tcpdump


    【解决方案1】:

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

    【讨论】:

    • size if 1514 with data 1460... 但是为什么只对这个特定的图像而不是其他图像失败?
    • 故障与该图像之间不能有任何联系。简单地说,如果没有指定预期字节数的协议层,您就无法可靠地“传输”任意大小的数据。
    【解决方案2】:

    我的朋友曾经遇到过同样的问题,结果证明他传输的二进制图像的有效负载在一路上触发了过滤路由器中的错误。当特定的字节序列通过时,该路由只会断开连接。离奇但真实。

    【讨论】:

    • 这可能是有道理的,因为 SUN 对它的切片与 Linux 机器不同……这个特定的字节序列仅在使用 linux 时在 TCP 数据有效负载的末尾看到,这是客户端保留的数据包在请求和超时...
    • 您知道导致此类问题的系统细节或字节序列吗?
    • 早在 2000 年左右就在 HP PC 上看到过类似的东西。死亡位图 - 如果保存到磁盘会在 Windows 上引发 BSOD。
    猜你喜欢
    • 2017-01-11
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2021-11-10
    相关资源
    最近更新 更多