Duplicar posible:
How to check if internet connection is present in java?Detectar conexión a Internet utilizando Java
Quiero ver si alguien tiene una forma fácil de detectar si hay una conexión a Internet cuando se utiliza Java. La aplicación actual usó el método "InternetGetConnectedState" en la DLL WinInit para Windows, pero mi aplicación debe ser multiplataforma para el funcionamiento de mac y de esta manera no funcionará. No sé nada de JNI para usar DLL en Java y se volvió frustrante rápidamente.
Las únicas formas en que podía pensar eran intentar abrir una conexión de URL a un sitio web y, si eso falla, devolver falso. Mi otro camino está abajo, pero no sabía si esto era generalmente estable. Si desenchufo mi cable de red, obtengo una excepción de excepción desconocida cuando trato de crear InetAddress. De lo contrario, si el cable está conectado, obtengo un objeto InetAddress válido. Todavía no he probado el código a continuación en un mac.
Gracias por cualquier ejemplo o consejo que pueda proporcionar.
ACTUALIZACIÓN: El bloque de código final está en la parte inferior. Decidí seguir el consejo de una solicitud HTTP (en este caso, Google). Es simple y envía una solicitud al sitio para que se devuelvan los datos. Si no puedo obtener ningún contenido de la conexión, no hay internet.
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;
}
código final del bloque:
//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;
}
Gracias por el comentario. Siempre es bueno recibir retroalimentación e ideas diferentes. Pensé en la conexión de URL o en HttpURLConnection para ese asunto. No sabía que esto solo probaba el DNS, pero puede que tenga que vivir con este método. –
Ver el bloque de código final anterior y la nota de actualización. –