2010-01-15 38 views

回答

1

可以间歇测试http连接到一个已知的宿主如谷歌和检测ConnectionExceptions

URLConnection con = new URL("http://www.google.com/").openConnection(); 
con.setUseCaches(false); 
con.setAllowUserInteraction(false); 

while(true) 
{ 
    try 
    { 
     con.connect(); 
     con.getContentType(); // just to make sure the connection works 
     // sleep for some interval 
    } 
    catch(IOException e) 
    { 
     // handle and break 
    } 
} 
+0

我认为downvoter有更好的解决方案? – pstanton 2010-01-15 08:38:33

1

一般来说,这是不可能检测和诊断网络“破损”在Java 100%的准确度或用任何其他语言。事实上,甚至不清楚什么构成“破损”。这就是为什么(例如)当您在URL中输入虚假DNS名称或IP地址时,您最喜欢的Web浏览器会给您一个模糊的错误消息。

的问题是,有很多情况下这是不可能知道是什么引起的网络交互失败:

  • 是我的机器拔掉?
  • 是在我的本地网络上叽叽喳喳?
  • 由于电源故障,我的ISP的网络已关闭?
  • 是一个互联网路由不稳定导致我的数据包被路由到土库曼斯坦?
  • 是Google down ...还是被某些俄罗斯黑客攻击者拒绝?

许多这些情况很难诊断。并且尝试从Java诊断事情比较困难,因为Java不提供用于发送ICMP数据包的标准API。基本上,您只能尝试解释尝试连接套接字失败时返回的Java异常。

国际海事组织,你最好的选择是利用现有的命令行工具,如'ping'和'traceroute',并学习阅读茶叶。或者如果这太难了,请将网络诊断留给专家。