在Java中检查互联网连接

3
我有一个每隔10分钟运行一次的java应用程序。因此,每当线程开始执行时,我都必须检查是否存在网络连接。所以我使用Socket类来实现这个目的。但是问题在于,如果电线没有连接到我的系统上,Socket类就能正常工作。如果我插入电线,就会有局域网但没有互联网。在这种情况下,Socket类无法抛出错误。以下是我的代码 -
Socket socket = null;
     try {
         socket = new Socket("www.google.com", 80);
     } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {            
         if (socket != null) try { socket.close();

       } 
       catch(IOException e) {
           e.printStackTrace();
        }
      System.exit(0);
     }

我查看了这里的代码 - 使用Java检测互联网连接。但是使用getContent()方法并没有帮助。

与您的问题无关,但您应该知道,如果catch调用System.exit(0)(至少在Java7中),则finally部分不会被执行。 - Pshemo
3个回答

1
你试过了吗?
boolean hasInternetAccess  = InetAddress.getByName("www.google.com").isReachable();

1
这总是返回false。 - Dan

1

你应该尝试连接到需要连接的内容,并在发生故障时进行处理。没有神奇的成功预测器。


0

两个答案。 1. 链接后面的代码很好。你基本上需要从一个URL接收数据,以确保它真的可达。我还会使用setUseCaches(false)来配置连接。 2. 你的前置检查并没有帮助你。你仍然可能在程序运行到一半时失去连接。所以,让你的代码运行。当它检测到连接问题时,向用户打印出错误并优雅地结束。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接