我的 Java 应用程序通过 UDP 接收数据。它将数据用于在线数据挖掘任务。这意味着接收每个数据包并不重要,这也是选择 UDP 的首要原因。此外,数据是通过 LAN 传输的,因此物理网络应该相当可靠。无论如何,我无法控制协议(protocol)的选择或包含的数据。
不过,我还是担心应用程序本身的过载和处理时间过长可能会导致数据包丢失。我想知道这些事情发生的频率以及丢失的数据量。
理想情况下,我正在寻找一种在生产系统中持续监控数据包丢失的方法。但部分解决方案也将受到欢迎。
我意识到不可能始终了解 UDP 数据包丢失情况(无法控制数据包内容)。我正在考虑类似于操作系统收到但从未到达应用程序的数据包;或者应用程序内部可能有一些聪明的解决方案,例如快速读取线程,当客户端繁忙时会删除数据。
我们正在 Windows Server 2003 或 2008 下进行部署。
最佳答案
问题是,如果您依赖 UDP 格式,则无法判断是否丢失了任何数据包。
如果您需要了解此类信息,则需要将其构建为叠加在 UDP 之上的格式(如 TCP 序列号)。如果您这样做并且格式很简单,那么您可以轻松地在 Microsoft 的 NetMon 或 WireShark 中创建过滤器来记录和跟踪该信息。
另请注意,TCP 序列号实现还有助于检测使用 UDP 时可能发生的乱序数据包。
关于java - 监控 Windows Server、Java 中的 UDP 数据包丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/954572/