Постоянно проверяйте интернет-соединение в Java - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь проверять, включен ли Интернет постоянно или нет каждые 5 секунд, я написал код ниже, но кое-как, как это всегда происходит внутри 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 голосов
/ 13 марта 2019

Вы можете сделать:

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

Если вы общаетесь с веб-сервисом, веб-сервис долженпредоставьте метод GET, чтобы проверить, доступен ли он.

Если вам нужно постоянно проверять, попробуйте что-то вроде

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

Вам также следует проверить опцию keepAlive.

Но более важный вопрос заключается в том, что происходит в вашем приложении, если интернет-соединение больше не доступно?

Большинство методов выдают исключения, если сервер больше не доступен.

Вы можете просто поймать их и отреагироватьна нем.

...