isReachable()
如果可以获得特权,则将使用 s,否则它将尝试在目标主机的端口 7(Echo)上建立 TCP 连接。
因此,您的问题可能是配置问题,没有足够的权限在客户端计算机上执行此操作,或者如果您的客户端没有执行此操作的权限,则在服务器上出现端口 7 问题。可能两者在你的情况下,你需要解决一方或另一方才能使它起作用。ICMP ECHO REQUEST
ICMP ECHO REQUEST
我在OSX和Linux客户端上测试了以下内容,并且在测试其他OSX,Linux和Windows Server计算机的可访问性时,它可以正常工作。我没有Windows机器来运行它作为客户端。
import java.io.IOException;
import java.net.InetAddress;
public class IsReachable
{
public static void main(final String[] args) throws IOException
{
final InetAddress host = InetAddress.getByName(args[0]);
System.out.println("host.isReachable(1000) = " + host.isReachable(1000));
}
}
从我在这里读到的内容。这显然是Windows的限制,并且在Windows 2000之前作为系统调用在Windows上不受支持,因此它默认尝试并连接到端口7,并且在您尝试“访问”的计算机上被阻止。Java 尚不支持新的本机系统调用。权限是针对基于Unix的系统,因为它们需要root来发送数据包。ICMP PING
ICMP
如果你想为Windows 2000及更高版本推出自己的Windows原生JNI,可以使用IcmpSendEcho函数。ICMP PING