【问题标题】:How to detect network breakage using java program?如何使用java程序检测网络中断?
【发布时间】:2010-01-15 06:54:58
【问题描述】:

有没有什么方法可以使用 Java 检测网络中断或网络较弱?

【问题讨论】:

    标签: java networking


    【解决方案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
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      问题是在很多情况下无法知道网络交互失败的原因:

      • 我的机器是否已拔掉电源?
      • 我的本地网络有什么乱七八糟的东西吗?
      • 我的 ISP 网络是否因电源故障而中断?
      • 是 Internet 路由不稳定导致我的数据包路由到土库曼斯坦吗?
      • 是 Google 倒闭了……还是被一些俄罗斯黑客攻击了 DoS?

      其中许多情况很难诊断。并且尝试从 Java 中进行诊断更加困难,因为 Java 不提供标准 API 来执行诸如发送 ICMP 数据包之类的事情。基本上,您只能尝试解释尝试连接套接字失败时返回的 Java 异常。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-24
        • 2015-06-08
        • 2018-04-13
        • 1970-01-01
        • 2016-10-14
        • 1970-01-01
        • 2017-06-15
        • 1970-01-01
        相关资源
        最近更新 更多