Java UDP Socket间歇性地接收

时间:2011-12-13 19:58:31

标签: java sockets udp

1)我有一个程序通过UDP从一个服务器向另一个服务器发送数据。

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

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

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

此SAME代码在外部接收数据包时非常有用。另外,如果我在3)正在监听的端口上运行tcpdump -i lo,实际上有一个恒定的数据流到达端口。

我无法理解问题出在哪里?

-Steve

1 个答案:

答案 0 :(得分:0)

当您在TCP中发送数据时,您不必担心流量控制,因为TCP会为您执行此操作 - 您可以根据需要尽快发送数据,如果发送速度过快,write方法将会阻止。

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

因此,您需要有一些方案可以自行限制数据包的流量。要测试这是否是问题,只需在每次发送之间弹出一个睡眠。如果您发现每秒发送1个数据包或每秒发送10个数据包,那么当您取消睡眠时,所有这些数据都会通过,您将返回20秒确定并且几分钟内没有任何内容,因为您的流量控制不足。