2013-08-17 174 views
3

我有一个Java应用程序,每10分钟运行一次。所以无论何时线程开始执行,我都必须检查是否有互联网连接。所以我为此使用Socket类。但是这里的问题是如果线路没有连接到我的系统,套接字类就可以正常工作。对我来说,如果我插入电线,那么我有局域网,但没有互联网。在这种情况下,套接字类无法引发错误。这里是我的代码 -在java中检查互联网连接

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); 
    } 

我检查了这里的代码 - Detect internet Connection using Java。但是使用getContent()并没有帮助。

+0

与你的问题没有关系,但你应该知道如果catch会调用'System.exit(0)'(至少在Java7中)'fi​​nally'部分不会被执行。 – Pshemo

回答

1

你试过了吗?

boolean hasInternetAccess = InetAddress.getByName("www.google.com").isReachable(); 
+1

这总是返回false – Dan

1

您应该尝试连接到您需要连接的任何设备,并在发生故障时处理故障。没有神奇的成功预测指标。

0

两个答案。 1.链接后面的代码很好。您基本上需要从URL接收数据以确保它真的可以访问。我会额外配置连接setUseCaches(false) 2.您的预先检查不会帮助你。您仍然可以在程序中途断开连接。所以,让你的代码运行。当它检测到连接问题时,优雅地向用户输出错误。