java - 线程安全 InetAddress.isReachable()

标签 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 似乎不正确,因为 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/

相关文章:

java - 如何使用 lwjgl 将相机视线方向用作 z 方向

java - ArrayList 中的通用集合

java - 我无法将对象从服务器发送到客户端

python - 使用 Python 请求测量网站加载时间

linux - ping 网站期间会发生什么?有哪些阶段?

java - 来自 Android 的 Yelp v2 API 使用 SignPost oauth libs 说签名无效

.net - SQL Server 2012 远程连接给出超时和 ASYNC_NETWORK_IO 错误

linux - Scala 中的并发网络

azure - 如何在 Azure 上启用 Ping(ICMP)

macos - 修改shell脚本来监控/ping多个ip地址