Возможный дубликат:
Как проверить наличие интернет-соединения в java?
Я хочу посмотреть, есть ли у кого-нибудь простой способ определить, есть ли интернет-соединение при использовании Java. Текущее приложение использовало метод InternetGetConnectedState в библиотеке WinInit для Windows, но мое приложение должно быть кросс-платформенным для работы с Mac, и этот способ не будет работать. Я даже не знаю JNI, чтобы использовать DLL на Java, и это быстро расстроило.
Только способы, о которых я мог думать, - это tring, чтобы открыть URL-соединение с веб-сайтом, и если это не удается, верните false. Мой другой путь ниже, но я не знал, стабильно ли это. Если я отключу свой сетевой кабель, я получаю исключение UnknownHostException при попытке создать InetAddress. В противном случае, если кабель подключен, я получаю действительный объект InetAddress. Я не тестировал ниже код на Mac.
Спасибо за любые примеры или советы, которые вы можете предоставить.
UPDATE: последний блок кода находится внизу. Я решил воспользоваться рекомендацией 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;
}