如何在Java中测试互联网的可用性?

时间:2009-03-13 22:35:36

标签: java

当我从url.openStream()中捕获异常时,我不想告诉互联网不可用的困难方式。

是否有一种简单的方法可以判断计算机是否通过Java连接到Internet? 在这种情况下,“连接到互联网”意味着能够从特定网址下载数据。

如果我尝试从它下载​​并且它不可用,那么该程序会挂起一点。我不想那么挂。因此,我需要一种快速的方式来查询网站是否可用。

9 个答案:

答案 0 :(得分:10)

您要避免的问题是等待您的http连接确定您尝试访问的URL确实不可用。为了实现这一点,你需要停止使用url.openStream()这是openConnection()。getInputStream()的快捷方式,并对你的连接有一个更好的控制。

URLConnection conn = url.openConnection();  
conn.setConnectTimeout(timeoutMs);  
conn.setReadTimeout(timeoutMs);  
in = conn.getInputStream();  

如果连接或读取超过了您在timeoutMs参数中提供的时间,此代码将允许您超时连接尝试。

答案 1 :(得分:5)

使用

Process p1 = java.lang.Runtime.getRuntime().exec("ping www.google.com");
System.out.println(p1.waitFor());
// return code for p1 will be 0 if internet is connected, else it will be 1

答案 2 :(得分:4)

没有“互联网可用性”这样的东西。 想象一下,您的HTTP请求通过透明的HTTP代理,您正在尝试访问列入黑名单的站点,并从代理服务器获得HTTP响应,告知您访问被拒绝。在这种情况下是否可以使用Internet?

我认为你应该更加具体地解决你的问题。

答案 3 :(得分:2)

您可能能够判断一个计算机是否已连接到网络,但即使它不能保证网络正常工作或者它已连接到互联网。

这是其中一个“吮吸并看到”问题。

尝试连接有什么问题?你为什么担心他们是否连接到互联网?

答案 4 :(得分:2)

如果标准是您是否可以访问给定的Web服务器,唯一的方法就是访问该Web服务器。

但是,您可以在启动时在后台线程中执行此操作,以便应用程序不会因此而延迟。然后,当需要实际下载时,可以使用“是/否”答案。在状态行中放置一条消息,以便用户知道发生了什么,并且如果在程序启动时未连接s / he,则不会对未启动的“连接到网络”感到惊讶。

答案 5 :(得分:1)

我对Java中可用的低级HTTP管道知之甚少,但您可以提前为该URL发出http HEAD请求。这会导致服务器仅发回标头而不是数据。如果超时1-3秒,您应该可以避免任何长时间的延迟。

答案 6 :(得分:1)

如果程序在等待下载时挂起,那么您可能正在使用GUI线程进行下载。如果您使用后台线程,即使超时/下载需要很长时间,您的程序也不会挂起。

答案 7 :(得分:0)

您可以向知名主持人发送ICMP消息......

答案 8 :(得分:0)

如果您的防火墙不禁止,您可以检查NTP server

我认为最好的选择是尝试在尝试避免时打开URL,因为最常打开的服务是这样。

您可以检查一个或两个不断变化的动态网址。对于instace,一些显示时间的网络。例如this one我找到了googleing。不止一个,因为网站可能会关闭; - )