我的问题很简单。我的程序需要在网络连接丢失时立即得到通知。我正在使用Java 5,所以无法使用非常方便的NetworkInterface功能。
目前我有两种不同的检查网络连接的方法:
(去除了try..catch)
目前我有两种不同的检查网络连接的方法:
(去除了try..catch)
方法一:
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;
方法二:
Socket socket = new Socket("www.google.com", 80);
netAccess = socket.isConnected();
socket.close();
return netAccess;
然而,这两种方法在返回false之前都会阻塞直到达到超时时间。我需要一种能够立即返回的方法,但要与Java 5兼容。
谢谢!
编辑:我忘记提到我的程序依赖于IP地址,而不是DNS名称。 因此,在解析主机时检查错误已经无效了...
第二次编辑:
使用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;
}
}
}
http://
有点多余。 - glglgl