在我的 Java 应用程序中,我需要一次获取多个连接的 ping,我尝试过为每个连接使用一个线程并测量响应时间,但它们似乎并不都是正确的。
是否有线程安全的方法来测量连接的 ping/响应时间?我目前正在使用:
Thread thread = new Thread(new Runnable() {
public void run(){
long start = System.currentTimeMillis();
someInetAddress.isReachable(5000);
long timeTaken = System.currentTimeMillis() - start;
}
});
但是 timeTaken 似乎不正确,因为 ping 为 150 的用户得到了 5000(可能更多,因为它似乎已经超时)
感谢帮助! 凯尔
编辑:好的,发现这是由于端口 7 对某些人关闭所致,有没有其他方法可以 ping 他们而不必关闭端口 7?
最佳答案
isReachable()
方法的工作原理是尝试连接到 TCP 端口 7(回显)。它实际上并不关心端口 7 是否关闭。它所关心的是连接是否有任何类型的响应。 ConnectException
的评级为 isReachable = true
,它应该花费与成功连接相同的时间,甚至可能更快。连接超时、主机无法访问等,评分为 false
。
该方法被宣传为在非常有限的情况下使用 ICMP:您不在 Windows 上并且拥有 root 权限。实际上这永远不适用。
关于java - 线程安全 InetAddress.isReachable(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16304918/