Можно создать дубликат:
How to check if internet connection is present in java?Обнаружение подключения к Интернету с помощью Java
Я хочу, чтобы увидеть, если кто-то имеет простой способ обнаружения, если есть подключение к Интернету при использовании Java. Текущее приложение использовало метод InternetGetConnectedState в библиотеке WinInit для Windows, но мое приложение должно быть кросс-платформенным для работы с Mac, и этот способ не будет работать. Я даже не знаю JNI, чтобы использовать DLL на Java, и это быстро расстраивалось.
Только способы, с помощью которых я мог думать, состояли в том, чтобы открыть URL-соединение с веб-сайтом, и если это не удастся, верните false. Мой другой путь ниже, но я не знал, стабильно ли это. Если я отключу свой сетевой кабель, я получаю исключение UnknownHostException при попытке создать InetAddress. В противном случае, если кабель подключен, я получаю действительный объект InetAddress. Я не тестировал ниже код на Mac.
Спасибо за любые примеры или советы, которые вы можете предоставить.
ОБНОВЛЕНИЕ: Конечный блок кода находится внизу. Я решил воспользоваться рекомендацией HTTP-запроса (в данном случае Google). Он прост и отправляет запрос на сайт для получения данных. Если я не могу получить какой-либо контент из соединения, нет Интернета.
public static boolean isInternetReachable()
{
try {
InetAddress address = InetAddress.getByName("java.sun.com");
if(address == null)
{
return false;
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}
Заключительный блок кода:
//checks for connection to the internet through dummy request
public static boolean isInternetReachable()
{
try {
//make a URL to a known source
URL url = new URL("http://www.google.com");
//open a connection to that source
HttpURLConnection urlConnect = (HttpURLConnection)url.openConnection();
//trying to retrieve data from the source. If there
//is no connection, this line will fail
Object objData = urlConnect.getContent();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}
Спасибо за комментарий. Всегда полезно получать обратную связь и разные идеи. Я подумал о соединении с URL-адресом или с помощью HttpURLConnection. Я не знал, что это проверено только DNS, но мне, возможно, придется жить с этим методом. – 2009-07-16 18:59:15
См. Заключительный блок кода выше и примечание по обновлению. – 2009-07-16 19:39:30