我的应用程序需要同时ping许多IP地址以提高代码执行速度。例如,ping一个300秒的ip地址,一秒钟后超时需要5分钟,而如果一次运行20个,它只需要大约15秒。
我试过为此调用windows ping.exe,但我遇到了两个独立且类似的问题。一个问题是,在某些Windows机器上,ping只会挂起几分钟似乎没有理由,直到我杀死线程并且它死了。另一个问题,我们以前ping机器上的ping.exe完全中断了,任何ping.exe调用都会持续存在,所以数百个ping.exe进程开始堆积直到机器崩溃,并从命令手动运行ping.exe在这种情况下,只是让另一个ping进程永远挂起。
我尝试使用名为icmp4j的库,但该库只允许一次一个ping在Windows上发生。
我尝试了这个person's code并最终遇到了我本地网络上的问题。在ping不存在的本地地址(在您的子网上)时,显然您可以收到一条说明地址无法访问的回复。在这些回复的50%中,我会暂停,而在另外50%的回复中,我会得到“无法解决的”。
有没有人知道在不使用icmp4j或ping.exe的情况下同时在Windows上运行多次ping的方法?
答案 0 :(得分:1)
InetAddress.isReachable()
是您需要的简单工具。
icmp4j应该可以正常工作,因为它只是isReachable
的包装。也许你不能使用静态入口点IcmpPingUtil.executePingRequest()
,尽管快速查看代码看起来并不令人担忧。如果您浏览该方法中的代码(NativeBridge
或JavaNativeBridge
,IcmPingRequest
和IcmpPingResponse
应该足够了)那么您应该能够构建一个健壮的线程安全类,它可以做你需要的。