我的問題相當簡單。如果網絡連接丟失,我的程序需要立即通知。我使用的是Java 5,因此我無法使用NetworkInterface的非常方便的功能。Java快速檢查網絡連接
目前我有檢查的網絡連接的兩種不同的方法:
(try..catches移除)
方法一:
URL url = new URL("http://www.google.com");
HttpURLConnection urlConnect = (HttpURLConnection) url.openConnection();
// trying to retrieve data from the source. If offline, this line will fail:
Object objData = urlConnect.getContent();
return true;
方法2:
Socket socket = new Socket("www.google.com", 80);
netAccess = socket.isConnected();
socket.close();
return netAccess;
但是,在返回false之前,這兩種方法都會阻塞,直到超時。我需要一種立即返回的方法,但與Java 5兼容。
謝謝!
編輯: 我忘了提及我的程序依賴於IP地址,而不是DNS名稱。對於錯誤解析主機出來的時候所以檢查...
2日編輯:
想通了使用NetworkInterface一個最終的解決方案:
Enumeration<NetworkInterface> eni = NetworkInterface.getNetworkInterfaces();
while(eni.hasMoreElements()) {
Enumeration<InetAddress> eia = eni.nextElement().getInetAddresses();
while(eia.hasMoreElements()) {
InetAddress ia = eia.nextElement();
if (!ia.isAnyLocalAddress() && !ia.isLoopbackAddress() && !ia.isSiteLocalAddress()) {
if (!ia.getHostName().equals(ia.getHostAddress()))
return true;
}
}
}
我對Java不太熟悉,但我認爲方法2中的'http://'太多了。 – glglgl
您可以使用Java 5.0運行可以使用NetworkInterface的Java 6或7應用程序。;) –
好像你需要一個回調方法來在網絡狀態發生變化時通知你。 – 2011-08-09 16:10:43