因此,我一直在使用isReachable在我的java代码中"ping“地址。这段代码似乎是每个人都在使用的:
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。即使我将其更改为空字符串。你知道为什么吗?
发布于 2012-07-21 05:49:05
一种通过java.net.InetAddress.isReachable()方法检查某个地址是否可达的方法。这些方法的实现是本机的,并尝试尽最大努力"ping“由InetAddress表示的地址。
令人惊讶的是,在java.net.InetAddress.isReachable()的Windows和Linux/Unix实现之间有许多不同之处。
虽然看起来很奇怪,但Windows并不正式支持ICMP "ping“系统调用。因此,Java SE 5实现尝试在端口7( echo服务)上打开TCP套接字,并希望得到某种类型的响应。
而Linux/Unix则支持ICMP "ping“系统调用。因此,java.net.InetAddress.isReachable()的实现首先尝试执行"ping“系统调用;如果此操作失败,它将回退到尝试打开端口7上的TCP套接字。
事实证明,在Linux/Unix中,ping系统调用需要根权限,因此大多数时候java.net.InetAddress.isReachable()都会失败,因为许多Java程序不是以根权限运行的。
正确的方法是ICMP协议。这是ping内部使用的。建议查看以收集知识并继续操作。
https://stackoverflow.com/questions/11587271
复制相似问题