如何检查是否可以通过java连接到互联网?一种方法是:
final URL url = new URL("http://www.google.com");
final URLConnection conn = url.openConnection();
... if we got here, we should have net ...
但是,有没有更合适的执行该任务,,特别是,如果你需要做连续检查非常频繁,并失去互联网连接的可能性很高?
发布于 2009-09-09 20:52:31
您应该连接到您的实际应用程序需要的位置。否则,你就是在测试你是否与某个不相关的地方(本例中是Google)建立了连接。
特别是,如果您正在尝试与web服务对话,并且您控制着web服务,那么使用某种廉价的“获取状态”web方法将是一个好主意。这样,你就能更好地了解你的“真正”通话是否可能奏效。
在其他情况下,只需打开一个到应该打开的端口的连接就足够了-或者发送一个ping。在这里,InetAddress.isReachable
可能是一个适合您需要的API。
发布于 2014-04-08 23:05:48
您基本上提供的代码加上对connect
的调用应该就足够了。所以,是的,可能只是Google不可用,但你需要联系的其他网站上有,但这种可能性有多大?此外,这段代码应该只在你实际无法访问外部资源时执行(在catch
块中,试图找出失败的原因),所以我想说的是,如果你感兴趣的外部资源和都不可用,那么很可能你有网络连接问题。
private static boolean netIsAvailable() {
try {
final URL url = new URL("http://www.google.com");
final URLConnection conn = url.openConnection();
conn.connect();
conn.getInputStream().close();
return true;
} catch (MalformedURLException e) {
throw new RuntimeException(e);
} catch (IOException e) {
return false;
}
}
发布于 2009-09-10 00:02:23
人们建议使用INetAddress.isReachable。问题是一些站点将其防火墙配置为阻止ICMP Ping消息。因此,即使web服务是可访问的,"ping“也可能失败。
当然,反之亦然。即使may服务器关闭,主机也可能对ping作出响应。
当然,由于本地防火墙的限制,机器可能无法直接连接到某些(或所有) web服务器。
根本的问题是“可以连接到互联网”是一个定义不明确的问题,这种事情很难在没有的情况下进行测试:
有关用户计算机和“本地”网络环境的and
因此,一般来说,最简单的解决方案是让应用程序尝试访问它需要访问的任何内容,然后依靠人类的智能来进行诊断。
https://stackoverflow.com/questions/1402005
复制相似问题