为什么Java InetAddress.isReachable()不能像JRE 1.7.x那样在JRE 1.8.x上运行

时间:2016-07-14 06:45:37

标签: 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);

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

亲切的问候原型

°°°°°修改

我试过这个代码......在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-没有机器

1 个答案:

答案 0 :(得分:1)

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