线程安全InetAddress.isReachable()

时间:2013-04-30 16:39:45

标签: java networking ping

在我的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关闭?

1 个答案:

答案 0 :(得分:1)

isReachable()方法通过尝试连接到TCP端口7(回声)来工作。它实际上并不关心端口7是否关闭。所有它关心的是连接是否有任何响应。 ConnectException费率为isReachable = true,与成功连接的时间大致相同,甚至可能更快。连接超时,主机无法访问等,速率为false

该方法被宣传为在非常有限的情况下使用ICMP:您不在Windows上并且您具有root权限。在实践中,这永远不适用。