【问题标题】:How do I test the availability of the internet in Java?如何在 Java 中测试 Internet 的可用性?
【发布时间】:2009-03-13 22:35:35
【问题描述】:

当我从 url.openStream() 捕获异常时,我不想说互联网不可用。

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

如果我尝试从它下载​​但它不可用,那么程序会挂起一段时间。我不想这样挂。因此,我需要一种快速查询网站是否可用的方法。

【问题讨论】:

    标签: java


    【解决方案1】:

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

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

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

    【讨论】:

    • 这只是一个平庸的解决方案,因为除非您在单独的线程中执行此操作,否则您仍然会遇到“挂起”。
    • 你能推荐一个更好的吗?我已经在使用单独的线程来下载数据。
    【解决方案2】:

    使用

    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
    

    【讨论】:

    • 那伽师父。谢谢你。好答案。
    【解决方案3】:

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

    我认为你应该更具体地说明你的问题。

    【讨论】:

      【解决方案4】:

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

      这是那些“吸了就看”的问题之一。

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          我对 Java 中可用的低级 HTTP 管道了解不多,但您总是可以提前发出对 url 的 http HEAD 请求。这会导致服务器只发回标头而不发回数据。通过 1-3 秒的超时,您应该能够避免任何长时间的延迟。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

              您可以向一个非常知名的主机发送 ICMP 消息...

              【讨论】:

              • 很多网络,尤其是企业网络,都会阻止 ICMP 流量。
              • @cletus 他说一个非常“知名”...所以它应该是一个允许 ICMP 流量的主机:)
              【解决方案9】:

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

              我认为最好的方法是尽量避免打开 URL,因为这是最常打开的服务。

              您可以检查一个或两个不断变化的动态 URL。例如,一些显示时间的网络。例如this one 我发现谷歌搜索。不止一个,因为网站可能会关闭;-)

              【讨论】:

                猜你喜欢
                • 2010-12-07
                • 2010-11-04
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多