java - 为什么 Java InetAddress.isReachable() 不能像在 JRE 1.7.x 上那样在 JRE 1.8.x 上工作

标签 java java-8 ip java-7 inetaddress

我一年前写了一个程序,今天我看到这个程序给了我一些奇怪的输出。一种在我们的网络中检测 PC 或笔记本电脑的方法我正在使用 InetAddress 类。我的程序按应有的方式工作,直到 Java 1.8.x 在执行机器上运行,如果该 IP 地址上没有机器,InetAddress.isReachable() 也会给我一个“TRUE”。

private String ipAddress = "192.168.1.200";
inetAddr = InetAddress.getByName(ipAddress);
inetIsReachable = inetAddr.isReachable(8000);
debug += "   INET is reachable: " + inetIsReachable;
System.out.println(debug);

这真的很奇怪,我不知道如何检测到这个错误。

亲切的问候原型(prototype)

°°°°°编辑

我试过这段代码...在 Java 1.7 上运行

  inetAddr = InetAddress.getByName(ipAddress);
  inetIsReachable = inetAddr.isReachable(8000);
// FALSE
  byte[] a = new byte[]{(byte) 192,(byte) 168,1,(byte) 200};
  inetAddr = InetAddress.getByAddress("192.168.1.200", a);
  inetIsReachable = inetAddr.isReachable(8000);
// also FALSE

但是命令行上的 ping 到达了机器!

°°°°°EDIT-2

Java 1.8

192.168.1.200 - InetAddress true - cmd ping true - 有一台机器

192.168.1.202 - InetAddress true - cmd ping false - 没有机器

Java 1.7

192.168.1.200 - InetAddress false - cmd ping true - 有一台机器

192.168.1.202 - InetAddress false - cmd ping false - 没有机器

最佳答案

这看起来像 bug #JDK-8159410 , 显然是在 8u73 之后引入的。

关于java - 为什么 Java InetAddress.isReachable() 不能像在 JRE 1.7.x 上那样在 JRE 1.8.x 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38367243/

相关文章:

java - 如何在普通java项目中使用maven项目jar

java - .Net 和 Java 接口(interface)是否足够相似,可以以某种方式进行整合?

java - maven 编译失败并出现错误 -source 1.7 中不支持静态接口(interface)方法

ip - 0.0.0.0、127.0.0.1 和 localhost 有什么区别?

php - mysql 查询慢 - IP 查找(禁止与否)

java - Infinispan 8 集群缓存

c# - C# 4.0 中的协变和逆变推理

java - Collectors.toMap 在与未用作值的对象不同的属性上编写合并函数

java - 为什么在映射到 Callable<T> 时需要显式提供类型参数?

php - 存储获取和存储IP地址