2011-12-13 57 views
0

1)我有一个程序可以通过UDP从一台服务器向另一台服务器发送数据。Java UDP Socket间歇性地接收

2)另一个程序接收这些,并简单地通过UDP将它们通过UDP转发到多个目的地。

3)其中一个目的地是localhost。

数据在2)中被接收并被发送到3)以不间断的恒定流。然而,从2)接收3)中的数据包的应用程序正在间歇性地接收。它将接收数据20秒,然后在几分钟内不会收到数据,并以看似随机的方式继续。

这个SAME代码在外部接收数据包时工作得很好。另外,如果我在3)端口上运行tcpdump -i lo,实际上会有一个持续的数据流到达端口。

我不明白问题出在哪里?

史蒂夫

+0

嗯,我认为首先要提的是,udp是为了无状态而不是流。所以丢包是udp正常的。我会建议在局域网上测试你的情况,通过以太网插入所有节点。 – 2011-12-13 20:00:55

回答

0

当你在TCP发送数据,你不必担心流量控制,因为TCP会为你 - 你可以发送数据以最快的速度,你喜欢和写入方法将阻止如果你发送得太快了。

这不是在UDP中的情况,您的数据包写入将立即完成并立即返回,但如果发送太多数据包过快,它将被简单地丢弃。这可能发生在从操作系统到所有路由器和网络设备到另一台机器的任何地方。

因此,您需要有一些方案可以自己限制数据包的流动。要测试这是否是问题,只需在每次发送之间弹出一个睡眠。如果您发现每秒发送一个数据包或每秒发送10个数据包,则所有这些数据都可以通过,然后当您移除睡眠时,您可以回到20秒确定,几分钟内就没有任何数据您知道,因为您的流量控制不足。