【发布时间】:2011-07-04 20:16:03
【问题描述】:
我们连接了一个路由器和 3 台 PC。
- PC1:192.168.1.2(无线)
- PC2:192.168.1.3(无线)
- PC3: 192.168.1.6
默认网关:192.168.1.1
当 PC3 尝试使用来自 this forum post 的代码查找连接的 PC 时,它只返回默认网关的 IP 地址(该地址是唯一可访问的地址)。
我尝试增加isReachable() 方法的超时时间。但它仍然只返回默认网关地址。
我尝试对单个 IP 地址执行此操作。
try {
InetAddress temp2 = InetAddress.getByAddress(new byte[]{(byte) 192, (byte) 168, (byte) 1, (byte) 2});
if (temp2.isReachable(1100)) {
java.lang.System.out.println("IP Address: " + temp2.getHostAddress() + " has connection.");
}else{
java.lang.System.out.println("IP Address: " + temp2.getHostAddress() + " has no connection.");
}
} catch (Exception ex) {
java.lang.System.out.println("Error: " + ex.getMessage());
}
然而,在那些 PC1 和 PC2 IP 地址上,我只得到了无连接状态。 (这意味着这些 IP 无法访问。)
但是当我在我的 Windows 控制台上 ping 它们时,这些 IP 已连接并且 ping 成功。
- 我的设置有什么问题。
- 我该如何解决这个问题。
【问题讨论】:
-
你是在unix系统上运行的吗?
-
不,我在 windows vista basics os 上运行它
-
成功执行 Windows 控制台 ping 的平均 ping 时间是多少?第一次 ping 时间是多少?如果你的第一次 ping 时间大于 1100,isReachable() 将超时,并返回 false。
-
@Richeve S. Bebedor:我认为 jvm 没有权限执行 ICMP 回显请求,并试图打开与 tcp 端口 7(甚至 udp)的连接作为后备.您可以使用网络嗅探器进行检查吗?
-
@guido 在 Windows 中,如果用户可以从命令行 ping,他也应该能够从 java 发送 ICMP 回显请求。如果这确实失败了,TCP echo 服务在 Windows 上默认不打开,所以它预计会失败(许多 linux 系统今天也出于安全原因阻止了这个)。使用嗅探器应该可以帮助您。
标签: java networking