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

我的应用程序需要同时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应该足够),那么你应该能够构建一个可以满足你需要的健壮的线程安全类.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...