在我的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特权。实际上,这从不适用。

07-26 03:23