#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, который заблокирован многими сетями.