我试图在每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操作系统。
由于
答案 0 :(得分:2)
因为他们测试不同的东西,或者说他们以不同的方式运作。
ping
使用ICMP。
实际上isReachable()
使用TCP。