0

在我的 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,有没有其他方法可以在他们不必关闭端口 7 的情况下 ping 他们?

4

1 回答 1

1

isReachable()方法通过尝试连接到 TCP 端口 7 (echo) 来工作。它实际上并不关心端口 7 是否关闭。它只关心连接是否有任何类型的响应。AConnectException速率为isReachable = true,并且它应该花费与成功连接相同的时间,甚至可能更快。连接超时、主机不可访问等,评价为false.

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

于 2013-04-30T23:16:04.773 回答