我们有一个路由器和3台PC相连。
默认网关: 192.168.1.1
当PC3试图使用来自这个论坛帖子的代码查找连接的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是不可触及的。)
但是当我在我的窗口控制台上点击它们时,这些is是连接的,点击是成功的。
发布于 2011-02-27 23:32:40
我相信guido在评论中的理论是正确的。见这个问题。我意识到链接的答案适用于Linux/UNIX主机,但我只是在一台Windows 7计算机上测试了您的代码,并验证了它也将TCP数据包发送到echo端口(7),而不是ICMP回送请求。(我在Java版本的1.6.0_21环境下在ver报告了Microsoft Windows [Version 6.1.7600]的Windows 7机顶盒上进行了测试)
一台典型的Windows机器很可能启用Windows防火墙。因此,可能会出现以下一系列事件:
很难说“你的设置有什么问题”。也许什么都没有。这取决于您尝试使用此功能的目的。你可能走错路了。您应该认识到,ping并不总是一种100%准确的测试主机是否在线的方法。在您的示例中,如果您只对本地网络上的主机感兴趣,那么在尝试ping主机之后检查ARP表可能更准确。
可能的解决办法:
ping命令行实用程序来测试可达性。https://stackoverflow.com/questions/5126697
复制相似问题