java.net.UnknownHostException: nombre de host no válido para el servidor

1. Introducción

En este tutorial, aprenderemos la causa de UnknownHostException con un ejemplo. También discutiremos posibles formas de prevenir y manejar la excepción.

2. ¿Cuándo se lanza la excepción?

UnknownHostException indica que no se pudo determinar la dirección IP de un nombre de host. Puede suceder debido a un error tipográfico en el nombre de host:

String hostname = "//locaihost"; URL url = new URL(hostname); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.getResponseCode();

El código anterior arroja una UnknownHostException ya que el locaihost mal escrito no apunta a ninguna dirección IP.

Otra posible razón para UnknownHostException es el retraso en la propagación de DNS o una configuración incorrecta de DNS.

Es posible que se necesiten hasta 48 horas para que una nueva entrada de DNS se propague por Internet.

3. ¿Cómo prevenirlo?

Evitar que ocurra la excepción en primer lugar es mejor que manejarla después. Algunos consejos para evitar la excepción son:

  1. Vuelva a verificar el nombre de host: asegúrese de que no haya errores tipográficos y recorte todos los espacios en blanco.
  2. Verifique la configuración de DNS del sistema: asegúrese de que el servidor DNS esté activo y accesible, y si el nombre de host es nuevo, espere a que el servidor DNS se ponga al día.

4. ¿Cómo manejarlo?

UnknownHostException extiende IOException , que es una excepción comprobada. De forma similar a cualquier otra excepción marcada, debemos lanzarla o rodearla con un bloque try-catch .

Manejemos la excepción en nuestro ejemplo:

try { con.getResponseCode(); } catch (UnknownHostException e) { con.disconnect(); }

Es una buena práctica cerrar la conexión cuando se produce UnknownHostException . Una gran cantidad de conexiones abiertas innecesarias pueden hacer que la aplicación se quede sin memoria.

5. Conclusión

En este artículo, aprendimos qué causa UnknownHostException , cómo prevenirlo y cómo manejarlo.

Como siempre, el código está disponible en Github.