Проверка подключения к Интернету без тестового подключения по URL с использованием java

#java #connection #jna

#java #подключение #jna

Вопрос:

Как я могу проверить, подключен ли мой компьютер к Интернету. Я не хочу использовать метод проверки URL. Можно ли вызвать функцию операционной системы с использованием Java? Например, в библиотеке JNA есть ли какая-либо функция для выполнения этого?

Комментарии:

1. Угадайте, как ОС проверяет ваше подключение к Интернету…

Ответ №1:

Вы можете использовать ping команду, подобную этой:

 class PingHost 
{
        public static void main(String[] args) 
        {
            String ip = "www.google.com";
            String pingResult = "";

            String pingCmd = "ping "   ip;
            try 
            {
                Runtime r = Runtime.getRuntime();
                Process p = r.exec(pingCmd);

                BufferedReader in = new BufferedReader(new
                InputStreamReader(p.getInputStream()));
                String inputLine;
                while ((inputLine = in.readLine()) != null) 
                {
                    System.out.println(inputLine);
                    pingResult  = inputLine;
                }
                in.close();

            } catch (IOException e) {
                System.out.println(e);
            }

        }
    }
  

Вы должны получить ответ типа:

 64 bytes from 173.194.37.147: icmp_seq=0 ttl=52 time=299.032 ms
64 bytes from 173.194.37.147: icmp_seq=1 ttl=52 time=508.100 ms
  

Комментарии:

1. Спасибо за ответ, но я собираюсь использовать эту функцию в потоке. Программа должна проверять соединение в секунду. Если я использую такой метод, моя программа через некоторое время замедлится.

2. @fivetech Вы можете использовать ping -c 1 www.google.com . Он остановится после получения ответа. Кстати, есть много полезных команд для ping linux.die.net/man/8/ping . Ping cmd — лучшая команда для проверки подключения.

3. Большое вам спасибо. Мое приложение работает нормально. Я установил Thread.sleep (2000), и теперь он не использует системные ресурсы намного больше.

4. @fivetech рад помочь. Любой отзыв будет оценен по достоинству 🙂

5. Моей репутации недостаточно, чтобы проголосовать, потому что я новичок на этом сайте

Ответ №2:

Вы можете проверить, можно ли преобразовать общее имя хоста (например, Google) через dns в IP-адрес.

Как только этот адрес будет разрешен, вы можете проверить, доступен ли он.

Комментарии:

1. Спасибо за ответ, но метод isReachable всегда возвращает false. Я не знаю, как справиться с этой проблемой. 🙁

2. Метод в основном выполняет то же самое, что и ping, который заблокирован многими сетями.