我们有一台路由器和3台PC连接。
默认网关: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成功。
答案 0 :(得分:2)
我相信guido在评论中的理论是正确的。见this question。我意识到链接的答案适用于Linux / UNIX主机,但我刚刚在Windows 7计算机上测试了您的代码,并验证它还将TCP数据包发送到echo
端口(7)而不是ICMP回送请求。 (我在{7}} 1.6.0_21
报告{7}}的Windows 7框上以Java版ver
进行了测试。
典型的Windows计算机可能启用了Windodws防火墙。因此,可能会发生以下事件序列:
很难说“您的设置存在问题”是什么。也许没什么。这取决于您尝试使用此功能的内容。你可能会以错误的方式解决这个问题。您应该意识到Microsoft Windows [Version 6.1.7600]
并不总是100%准确地测试主机是否在线。在您的情况下,如果您只对本地网络上的主机感兴趣,则在尝试ping主机后检查ARP表可能更准确。
可能的解决方法:
ping
命令行实用程序来测试可访问性。