2013-04-30 46 views
0

在我的Java應用程序中,我需要一次獲得多個連接的ping,我已經嘗試對每個連接使用一個線程並測量響應時間,但它們並不都是正確的。線程安全InetAddress.isReachable()

是否有線程安全的方式來測量連接的ping /響應時間?我目前正在使用:

Thread thread = new Thread(new Runnable() { 
    public void run(){ 
     long start = System.currentTimeMillis(); 
     someInetAddress.isReachable(5000); 
     long timeTaken = System.currentTimeMillis() - start; 
    } 
}); 

然而timeTaken似乎並不爲用戶提供150平越來越向5000是正確的(可能更多,因爲它似乎已經超時)

幫助表示讚賞! Keir

編輯:好的發現,由於Port 7對某些人而言是關閉的,有沒有其他辦法可以在沒有Port 7關閉的情況下ping他們?

+0

是否所有用戶都超時? – christopher 2013-04-30 16:41:12

+0

你必須在所有線程之間共享'someInetAddress'嗎? – HeatfanJohn 2013-04-30 16:43:35

+2

防火牆?客戶端是否允許ICMP Ping和/或TCP端口7(Echo)? – Fildor 2013-04-30 16:43:46

回答

1

isReachable()方法通過嘗試連接到TCP端口7(回顯)來工作。它實際上並不關心7號港口是否關閉。它所關心的是連接是否有任何響應。 A ConnectException費率爲isReachable = true,並且它應該花費與成功連接大致相同的時間,甚至更快。連接超時,主機無法訪問等,速率爲false

在非常有限的情況下,該方法被宣佈爲使用ICMP:您不在Windows上並且擁有root權限。實際上這從來不適用。