使用 Java 检测互联网连接
可能的重复:
如何检查Java中是否存在互联网连接?
我想看看是否有人在使用Java时有一种简单的方法来检测是否存在互联网连接。当前应用在 Windows 的 WinInit DLL 中使用了“InternetGetConnectedState”方法,但我的应用需要跨平台才能进行 Mac 操作,并且这种方式将不起作用。我根本不知道JNI在Java中使用DLL,它很快就变得令人沮丧。
我能想到的唯一方法是打开一个网站的URL连接,如果失败,则返回false。我的另一种方式在下面,但我不知道这是否总体上是稳定的。如果我拔下我的网络电缆,我在尝试创建InetAddress时会得到一个UnknownHostException。否则,如果电缆已连接,我将得到一个有效的 InetAddress 对象。我还没有在Mac上测试下面的代码。
感谢您提供的任何示例或建议。
更新:最终代码块位于底部。我决定接受HTTP请求的建议(在本例中为Google)。它很简单,并向站点发送请求以返回数据。如果我无法从连接中获取任何内容,则没有互联网。
public static boolean isInternetReachable()
{
try {
InetAddress address = InetAddress.getByName("java.sun.com");
if(address == null)
{
return false;
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}
最终代码块:
//checks for connection to the internet through dummy request
public static boolean isInternetReachable()
{
try {
//make a URL to a known source
URL url = new URL("http://www.google.com");
//open a connection to that source
HttpURLConnection urlConnect = (HttpURLConnection)url.openConnection();
//trying to retrieve data from the source. If there
//is no connection, this line will fail
Object objData = urlConnect.getContent();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}