我的问题相当简单。如果网络连接丢失,我的程序需要立即通知。我使用的是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