Java 线程安全的InetAddress.isReachable()
在我的Java应用程序中,我需要一次获得多个连接的ping,我尝试为每个连接使用一个线程并测量响应时间,但它们似乎都不正确 是否有线程安全的方法来测量连接的ping/响应时间?我目前正在使用:Java 线程安全的InetAddress.isReachable(),java,networking,ping,Java,Networking,Ping,在我的Java应用程序中,我需要一次获得多个连接的ping,我尝试为每个连接使用一个线程并测量响应时间,但它们似乎都不正确 是否有线程安全的方法来测量连接的ping/响应时间?我目前正在使用: Thread thread = new Thread(new Runnable() { public void run(){ long start = System.currentTimeMillis(); someInetAddress.isReachable(5
Thread thread = new Thread(new Runnable() {
public void run(){
long start = System.currentTimeMillis();
someInetAddress.isReachable(5000);
long timeTaken = System.currentTimeMillis() - start;
}
});
然而,耗时似乎并不正确,因为使用150 ping的用户将获得5000 ping(可能更多,因为它似乎已超时)
谢谢你的帮助!
基尔
编辑:好的,我发现这是由于某些人关闭了端口7,有没有其他方法可以在不关闭端口7的情况下ping他们?isReachable()方法通过尝试连接到TCP端口7(echo)来工作。它实际上并不关心端口7是否关闭。它关心的只是连接是否有任何类型的响应。ConnectException
的评分为isReachable=true
,它所需的时间应该与成功连接所需的时间大致相同,甚至更快。连接超时、无法访问主机等,速率为false
该方法被宣传为在非常有限的情况下使用ICMP:您不在Windows上,并且您具有root权限。实际上,这永远不适用。是否所有用户都超时了?是否必须在所有线程之间共享
someInetAddress
?防火墙?客户端是否允许ICMP Ping和/或TCP端口7(Echo)?@ChrisCooney-Nope,它对某些用户运行良好。@HeatfanJohn-Nope,每个someInetAddress对于每个线程都是唯一的