2010-01-15 41 views

回答

1

可以間歇測試http連接到一個已知的宿主如谷歌和檢測ConnectionExceptions

URLConnection con = new URL("http://www.google.com/").openConnection(); 
con.setUseCaches(false); 
con.setAllowUserInteraction(false); 

while(true) 
{ 
    try 
    { 
     con.connect(); 
     con.getContentType(); // just to make sure the connection works 
     // sleep for some interval 
    } 
    catch(IOException e) 
    { 
     // handle and break 
    } 
} 
+0

我認爲downvoter有更好的解決方案? – pstanton 2010-01-15 08:38:33

1

一般來說,這是不可能檢測和診斷網絡「破損」在Java 100%的準確度或用任何其他語言。事實上,甚至不清楚什麼構成「破損」。這就是爲什麼(例如)當您在URL中輸入虛假DNS名稱或IP地址時,您最喜歡的Web瀏覽器會給您一個模糊的錯誤消息。

的問題是,有很多情況下這是不可能知道是什麼引起的網絡交互失敗:

  • 是我的機器拔掉?
  • 是在我的本地網絡上嘰嘰喳喳?
  • 由於電源故障,我的ISP的網絡已關閉?
  • 是一個互聯網路由不穩定導致我的數據包被路由到土庫曼斯坦?
  • 是Google down ...還是被某些俄羅斯黑客攻擊者拒絕?

許多這些情況很難診斷。並且嘗試從Java診斷事情比較困難,因爲Java不提供用於發送ICMP數據包的標準API。基本上,您只能嘗試解釋嘗試連接套接字失敗時返回的Java異常。

國際海事組織,你最好的選擇是利用現有的命令行工具,如'ping'和'traceroute',並學習閱讀茶葉。或者如果這太難了,請將網絡診斷留給專家。