【发布时间】:2009-11-27 13:31:59
【问题描述】:
我有一个问题 - 当我尝试通过 posix 套接字发送大量数据(无论是文件还是某些数据)时,有时我没有收到我期望的 - 我使用了 wireshark确定导致错误的原因,我发现,正是在我的应用程序中断时,双向发送的数据包标记为红色,表示“零窗口”或“窗口已满”。
结果是,应用层没有得到send()函数发送的一条数据。但它得到了下一部分......
我是不是做错了什么?
编辑:
假设我想发送 19232 条数据,每条 1024 字节 - 在某个随机点(或根本不发送)而不是第 9344 个数据包,我得到第 9345 个数据包。而且我没有实现任何重传协议,因为我认为 TCP 会为我完成。
【问题讨论】:
-
TCP 应该为你做这件事......你能复制/粘贴你的代码的一部分吗?
-
我曾尝试使用套接字在 4 个 FC8 x86 系统上发送/接收大文件(比如几个 GB,带有 FILE64 选项),一个作为服务器和 3 个客户端。虽然我使用应用程序级消息传递库 Effo NetMsg (effonetmsg.googlecode.com)。如果是 TCP,应用程序 send() 可以通过使用协议和发送/接收缓冲区控制来传输更大的数据包(意味着 > MTU)。所以系统应该没有问题。
标签: c++ linux tcp sockets posix