如何使用java程序检测网络破坏?

时间:2010-01-15 06:54:59

标签: java networking

有没有办法使用Java来检测网络破坏或网络较弱?

2 个答案:

答案 0 :(得分:1)

您可以间歇性地测试与已知主机(如google)的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
    }
}

答案 1 :(得分:1)

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

问题在于,在许多情况下无法知道导致网络交互失败的原因:

  • 我的机器是不插电的?
  • 在我的本地网络上喋喋不休?
  • 我的ISP的网络因电源故障而关闭了吗?
  • 是因特网路由不稳定导致我的数据包被路由到土库曼斯坦?
  • 谷歌是否已经被一些俄罗斯黑客暴徒搞砸了?

其中许多情况很难诊断。尝试从Java诊断事物更难,因为Java不提供标准API来执行发送ICMP数据包等事情。基本上,您只能尝试解释在尝试连接套接字失败时收到的Java异常。

IMO,您最好的选择是利用现有的命令行工具,如“ping”和“traceroute”,并学会阅读茶叶。或者如果这太难了,请将网络诊断留给专家。