2009-06-05 86 views
1

我的Java应用程序通过UDP接收数据。它使用数据进行在线数据挖掘任务。这意味着接收每个数据包并不重要,这首先使得UDP的选择合理。此外,数据通过LAN传输,因此物理网络应该合理可靠。无论如何,我无法控制协议的选择或所包含的数据。在Windows Server,Java中监视UDP数据包丢失

不过,我担心可能由于应用程序本身的过载和处理时间过长而导致丢包。我想知道这些事情发生的频率以及丢失了多少数据。

理想情况下,我正在寻找一种方法来监控生产系统中的丢包情况。但部分解决方案也是受欢迎的。

我意识到不可能总是知道UDP数据包丢失(不控制数据包内容)。我正在考虑沿着操作系统接收到的数据包的行,但从来没有到达应用程序;也可能是应用程序内部的一些聪明的解决方案,例如快速阅读线程,在客户端忙时丢弃数据。

我们在Windows Server 2003或2008

回答

2

的问题是,有没有办法告诉你,如果是依靠UDP格式,你已经失去了任何数据包进行部署。

如果您需要知道这种类型的信息,您需要将其构建为您在UDP层上的格式(如TCP序列号)。如果你这样做,而且格式很简单,那么你可以很容易地在微软的NetMon或WireShark中创建过滤器来记录和跟踪这些信息。

另请注意,TCP序列号的实现还有助于检测使用UDP时可能发生的乱序数据包。

+0

我意识到不可能总是知道丢包,但我正在寻找一种方法来知道至少* something *。我编辑了这个问题来反映这一点。 – daphshez 2009-06-05 13:21:16

+0

因为你的问题没有多大意义,因为你几乎不应该陷入你丢失了操作系统已经收到但没有处理的数据包的情况。如果你处理的数据包速度很慢,但非常不可能,那么它可能会*。网络并不是那么快。我也想不出任何方式来检测由于应用程序缓慢而导致的数据包丢失。我想我的答案仍然是正确的方法来检测数据包丢失,无论是通过网络或缓慢的应用程序,因为你不能分辨两者之间的差异。 – 2009-06-05 16:04:24

0

如果您担心数据包丢失,请使用TCP。

这就是为什么它被发明的原因之一。