java - 如何在不使用 ping.exe 的情况下使用 Windows 上的 Java 一次发送多个 ping?

标签 java windows ping icmp

我的应用程序需要一次 ping 多个 IP 地址以提高代码的执行速度。例如,ping 300 个 1 秒后超时的 IP 地址需要 5 分钟,而如果一次运行 20 个,则只需要大约 15 秒。

我曾尝试为此调用 Windows ping.exe,但我遇到了两个独立且相似的问题。一个问题是,在某些 Windows 机器上,ping 会无缘无故地挂起几分钟,直到我终止线程并且它死掉。另一个问题是,我们之前在机器上遇到过 ping.exe 完全中断的情况,任何 ping.exe 调用都会永远持续,因此数百个 ping.exe 进程开始堆积,直到机器崩溃,并从命令手动运行 ping.exe在这种情况下,行只会让另一个 ping 进程永远挂起。

我试过使用一个名为 icmp4j 的库,但该库一次只允许在 Windows 上执行一个 ping 操作。

我试过这个 person's code最后在我的本地网络上遇到了问题。当 ping 一个不存在的本地地址(在您的子网上)时,显然您会得到一个回复​​,说该地址无法访问。对于这些回复中的 50%,我会超时,而在另外 50% 的回复中,我会“无法ping通”。

有谁知道在不使用 icmp4j 或 ping.exe 的情况下同时在 Windows 上运行多个 ping 的方法吗?

最佳答案

InetAddress.isReachable() 是您需要的基本工具。

icmp4j 应该可以很好地完成这项工作,因为它只是 isReachable 的包装器。也许您不能使用静态入口点 IcmpPingUtil.executePingRequest(),但快速查看代码看起来并不十分令人担忧。如果您通过该方法中的代码(NativeBridgeJavaNativeBridgeIcmPingRequestIcmpPingResponse 应该就足够了),那么您应该能够构建一个健壮的线程安全类,它可以满足您的需要。

关于java - 如何在不使用 ping.exe 的情况下使用 Windows 上的 Java 一次发送多个 ping?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36317105/

相关文章:

Java 游戏设计类加载

java - Libgdx - 线程 "LWJGL Application"java.lang.ClassCastException 中的异常

c++ - Qt 中许多 Windows 函数的未解决链接器错误

Android 奇怪的跨设备行为

java - 尝试使用 jnlp 部署 java applet

python - Windows 10 重新安装后 Autopep8 和其他模块无法工作

c++ - 从另一个进程中检索 GUI 对象

c - 为什么在ping程序中内核没有去掉IP层

erlang - 如何连接在网络中不同主机上运行的两个 Erlang 节点?

java - 选择排序问题