我一年前写了一个程序,今天我看到这个程序给了我一些奇怪的输出。一种在我们的网络中检测 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/