【发布时间】:2011-12-13 19:58:31
【问题描述】:
1) 我有一个程序通过 UDP 将数据从一台服务器发送到另一台服务器。
2) 另一个程序接收这些,并通过 UDP 将它们简单地转发到多个目的地,通过 UDP。
3) 目的地之一是本地主机。
数据在 2) 中被接收并以不间断的恒定流被发送到 3)。然而,在 3) 中从 2) 接收数据包的应用程序正在间歇性地接收。它将接收数据 20 秒,然后几分钟不接收,并以看似随机的方式继续。
当从外部接收数据包时,此 SAME 代码可以完美运行。此外,如果我在 3) 正在侦听的端口上运行 tcpdump -i lo,则实际上有恒定的数据流到达该端口。
我不明白问题出在哪里?
-史蒂夫
【问题讨论】:
-
嗯,我认为首先要提到的是 udp 是无状态的,而不是流。所以丢包对于udp来说是正常的。我建议在局域网上测试你的情况,所有节点都通过以太网插入。
-
向我们展示接收代码。 “几分钟”在网络世界中是永恒的。
-
我对“丢弃数据包对于 udp 来说是正常的”@owen 存在问题。我认为应该是“不能保证接收所有数据包”。像 Nikolai 提到的那样长时间丢弃数据包是非常不寻常的。要么这是线程问题,要么正在发生其他事情。
-
可能是 localhost UDP 缓冲区溢出@Steve。我们在这里谈论的是什么类型的音量?每秒多少个数据包?