所以我一直在使用isReachable来“ping”我的java代码中的地址。这段代码是每个人似乎都在使用的:
try
{
InetAddress address = InetAddress.getByName("172.16.2.0");
// Try to reach the specified address within the timeout
// periode. If during this periode the address cannot be
// reach then the method returns false.
boolean reachable = address.isReachable(10000);
System.out.println("Is host reachable? " + reachable);
} catch (Exception e)
{
e.printStackTrace();
}
我的问题是,无论我使用什么用于我的IP地址,它总是返回true。即使我把它改成空字符串。有什么想法吗?
答案 0 :(得分:2)
通过java.net.InetAddress.isReachable()方法检查某个地址是否可访问的方法。 这些方法的实现是本机的,并试图尽力“ping”InetAddress表示的地址。
令人惊讶的是,Windows与java.net.InetAddress.isReachable()
的Linux / Unix实现之间存在许多差异。
事实证明,在Linux / Unix中,ping系统调用需要root权限,因此大多数时候java.net.InetAddress.isReachable()都会失败,因为许多Java程序不能以root身份运行。
正确的方法是ICMP协议。这就是 ping 在内部使用的内容。建议您THIS收集知识并继续。
FROM: Simone Bordet's Blog