java inetaddress isreachable not working

时间:2015-07-15 07:05:53

标签: java networking

我试图在每10秒钟内循环ping 200个IP。因此,此循环每10秒执行一次。我正在使用此代码来ping IP

for (i = 0; i <= 200; i++ )
{
   ProcessBuilder processBuilder = new ProcessBuilder("ping", isWindows? "-n" : "-c", "1", *SOMEIP*);
   Process proc = processBuilder.start();

   int returnVal = proc.waitFor();
}

这只是我的代码的一部分。我正在为每个ping创建单独的线程,因为如果100个IP关闭,那么ping每个并且需要超过300秒。每个IP顺序。所以,创建了单独的线程。但问题是,无论何时执行循环,PC的CPU使用率都会达到90%,这对关键系统来说并不好。所以我把程序改成了这个。

for (i = 0; i <= 200; i++ )
{
   InetAddress inet = InetAddress.getByName(*SOMEIP*);
   System.out.println(inet.isReachable(3000) ? "Host is reachable" : "Host is NOT reachable");

}

在上面的代码中,由于同样的问题,我正在为每个Ping创建单独的线程。现在,我在这里遇到另一个问题。此代码给出了意想不到的结果。可ping的IP也显示使用上述代码无法访问。为什么会这样?

isReachable 功能错误吗?

我正在使用Windows操作系统。

由于

1 个答案:

答案 0 :(得分:2)

因为他们测试不同的东西,或者说他们以不同的方式运作。

ping使用ICMP。

实际上isReachable()使用TCP。