我试图每 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 每个 IP 将需要超过 300 秒的时间。因此,创建了单独的线程。但问题是,每当循环执行时,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 操作系统。
谢谢
最佳答案
因为他们测试不同的东西,或者更确切地说,他们以不同的方式运作。
ping
使用 ICMP。
实际上 isReachable()
使用 TCP。
关于java inetaddress isreachable 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31439952/