用java不断检查互联网

时间:2019-03-13 07:00:43

标签: java wait

我试图每隔5秒检查一次Internet是否持续开启,我在下面的代码中写了一些代码,但它始终如何在wait()内等待无限。

我写的代码:

Socket socket = null;


public void checkInternetConnectivity() throws InterruptedException {
    boolean reachable = false;
    ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
    service.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            try {
                socket = new Socket("xxx.xxx.xxx.x", xx);
            } catch (UnknownHostException e) {
                stopApp();
            } catch (IOException e) {
                stopApp();
            }
        }
    }, 0, 5, TimeUnit.SECONDS);


    synchronized (this) {
        wait();
    }
}

private void stopApp() {
    System.out.println("Internet Not Available stopping app");
    System.exit(0);
}

它总是卡在下面:

synchronized (this) {
        wait();
    }

1 个答案:

答案 0 :(得分:0)

您可以这样做:

InetAddress.isReachable 

根据您的需求,您应考虑尝试通过

到达特定主机
private static boolean googleIsAvailable() {
    try {
        final URL url = new URL("http://www.google.com");
        final URLConnection connection = url.openConnection();
        connection.connect();
        connection.getInputStream().close();
        return true;
    } catch (MalformedURLException e) {
        throw new RuntimeException(e);
    } catch (IOException e) {
        return false;
    }
}

如果您正在与Web服务通信,则Web服务应提供GET方法以检查其是否可用。

如果您需要不断检查,请尝试类似

Socket s = new Socket(SERVER_ADDRESS, TCP_SERVER_PORT);
while(s.isConnected()){
 //do your stuff
}  

您还应该签出keepAlive选项。

但是更重要的问题是,如果互联网连接不再可用,您的应用程序会发生什么?

如果服务器不再可用,大多数方法将引发异常。

您可以抓住他们并对它做出反应。