Метод "isReachable" во многих случаях мне не подходил.Вы можете прокрутить до конца, чтобы увидеть мой вариант для простого тестирования, если вы подключены к сети и способны разрешать внешние хосты (например, google.com) ... Что обычно работает на машинах * NIX.
Вопрос
Существует много разговоров об этом:
Часть 1. Воспроизводимый пример проблемы
Примечаниечто в этом случае не получается.
//also, this fails for an invalid address, like "www.sjdosgoogle.com1234sd"
InetAddress[] addresses = InetAddress.getAllByName("www.google.com");
for (InetAddress address : addresses) {
if (address.isReachable(10000))
{
System.out.println("Connected "+ address);
}
else
{
System.out.println("Failed "+address);
}
}
//output:*Failed www.google.com/74.125.227.114*
Часть 2. Обходной путь для взлома
В качестве альтернативы вы можете сделать это:
// in case of Linux change the 'n' to 'c'
Process p1 = java.lang.Runtime.getRuntime().exec("ping -n 1 www.google.com");
int returnVal = p1.waitFor();
boolean reachable = (returnVal==0);
Опция -c ping позволит ping просто попытаться связаться с сервером один раз (в отличие от бесконечного пинга, который мы привыкли использовать в терминале).
Это вернет 0если хост достижим .В противном случае вы получите «2» в качестве возвращаемого значения.
Гораздо проще - но, конечно, это зависит от платформы.И при использовании этой команды могут быть определенные предостережения о привилегиях - но я считаю, что она работает на моих машинах.
ОБРАТИТЕ ВНИМАНИЕ, что: 1) Это решение не является качеством производства.Это немного взломать.Если Google не работает, или ваш интернет временно медленный, или, может быть, даже если в ваших привилегиях / системных настройках есть какая-то забавность, если он может вернуть ложные отрицания (то есть он может потерпеть неудачу, даже если входной адрес доступен).2) Ошибка isReachable является нерешенной проблемой.Опять же - есть несколько онлайн-ресурсов, указывающих, что не существует «идеального» способа сделать это во время написания этой статьи, из-за того, как JVM пытается достичь хостов, - я думаю, что это внутренне специфичная для платформы задача, которая, хотя и проста, еще недостаточно абстрагирован JVM.