java inetaddress isreachable 不工作

标签 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 每个 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/

相关文章:

java - 在 java 流中的映射中使用多个映射函数与 block 语句

java - 在测试中模拟可变网络条件

linux - iptables 从过滤表移回 nat 表

c - 为什么在 printf 中两次调用 inet_ntoa 会给出错误的输出?

c++ - 如何使用 QDnsLookup 类查找网站的 IP 地址?

用于多线程批量导入的Java框架

java - 登录 Unix 位置

Java代理显示动态生成的图形?

java - ObjectInputStream - 如何等待新数据?

java - 当点击 JButton 连接到服务器时,程序卡住