使用Java检测互联网连接

我想看看是否有人在使用Java时有一种简单的方法来检测是否存在Internet连接。当前的应用程序在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;

}

回答:

这是解决问题的完全合理的方法。不好的是,您实际上是在测试DNS而不是测试整个网络,但是实际上,您通常可以将它们视为等效。

要记住的另一件事是,您将需要设置系统属性以在Java运行时中关闭dns缓存。否则,它可能会继续根据缓存的数据报告网络已启动(即使网络已关闭)。

另一种方法是实际上经常打开对某个网络地址的HTTP请求。

以上是 使用Java检测互联网连接 的全部内容, 来源链接: utcz.com/qa/412471.html

回到顶部