我的应用程序需要同时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的方法?
最佳答案 InetAddress.isReachable()是您需要的简单工具.
icmp4j应该可以正常工作,因为它只是isReachable的包装.也许您不能使用静态入口点IcmpPingUtil.executePingRequest(),尽管快速查看代码看起来并不十分令人担忧.如果你查看该方法中的代码(NativeBridge或JavaNativeBridge,IcmPingRequest和IcmpPingResponse应该足够),那么你应该能够构建一个可以满足你需要的健壮的线程安全类.