在我的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似乎不正确,因为150 ping的用户获得5000(可能更多,因为它似乎已超时)
感谢帮助!
基尔
编辑:好吧,发现这是由于某些人关闭了端口7,是否还有其他方法可以ping通他们而不必关闭端口7?
最佳答案
isReachable()
方法通过尝试连接到TCP端口7(回显)来工作。实际上,它并不关心端口7是否已关闭。它关心的只是对连接是否有任何响应。 ConnectException
的评分为isReachable = true
,连接成功所需的时间大约相同,甚至更快。连接超时,主机无法访问等,评分为false
。
公告此方法在非常有限的情况下使用ICMP:您不在Windows上,并且具有root特权。实际上,这从不适用。