1. Introducción
En este tutorial rápido, discutiremos algunas posibles causas de java.net.ConnectException . Luego, mostraremos cómo verificar la conexión con la ayuda de dos comandos disponibles públicamente y un pequeño ejemplo de Java.
2. Qué causa java.net.ConnectException
La excepción java.net.ConnectException es una de las excepciones Java más comunes relacionadas con las redes. Podemos encontrarlo cuando estamos estableciendo una conexión TCP desde una aplicación cliente a un servidor. Como es una excepción marcada, deberíamos manejarla correctamente en nuestro código en un bloque try-catch .
Hay muchas causas posibles de esta excepción:
- El servidor al que intentamos conectarnos simplemente no está iniciado, por lo tanto, no podemos obtener una conexión.
- La combinación de host y puerto que estamos usando para conectarnos al servidor puede ser incorrecta
- Un firewall puede bloquear las conexiones desde puertos o direcciones IP específicas
3. Detectar la excepción mediante programación
Por lo general, nos conectamos al servidor mediante programación usando la clase java.net.Socket . Para establecer una conexión TCP, debemos asegurarnos de que nos estamos conectando a la combinación correcta de puerto y host:
String host = "localhost"; int port = 5000; try { Socket clientSocket = new Socket(host, port); // do something with the successfully opened socket clientSocket.close(); } catch (ConnectException e) { // host and port combination not valid e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }
Si la combinación de host y puerto es incorrecta, Socket lanzará una java.net.ConnectException. En nuestro ejemplo de código anterior, imprimimos el seguimiento de la pila para determinar mejor qué está fallando. Ningún rastro de pila visible significa que nuestro código se conectó correctamente al servidor.
En este caso, debemos verificar los detalles de la conexión antes de continuar. También debemos verificar que nuestro firewall no esté impidiendo la conexión.
4. Verificación de conexiones con la CLI
A través de la CLI, podemos usar el comando ping para verificar si el servidor al que intentamos conectarnos está funcionando .
Por ejemplo, podemos comprobar si el servidor Baeldung está iniciado:
ping baeldung.com
Si el servidor Baeldung se está ejecutando, deberíamos ver información sobre los paquetes enviados y recibidos.
PING baeldung.com (104.18.63.78): 56 data bytes 64 bytes from 104.18.63.78: icmp_seq=0 ttl=57 time=7.648 ms 64 bytes from 104.18.63.78: icmp_seq=1 ttl=57 time=14.493 ms
telnet es otra herramienta CLI útil que podemos usar para conectarnos a un host o dirección IP específicos. Además, también podemos pasar un puerto exacto que queremos probar. De lo contrario, se utilizará el puerto 23 predeterminado.
Por ejemplo, si queremos conectarnos al sitio web de Baeldung en el puerto 80, podemos ejecutar:
telnet baeldung.com 80
Vale la pena señalar que es posible que los comandos ping y telnet no siempre funcionen, incluso si el servidor al que intentamos acceder está en ejecución y estamos usando la combinación correcta de puerto y host. Este suele ser el caso en los sistemas de producción, que suelen estar muy protegidos para evitar el acceso no autorizado. Además, un firewall que bloquea el tráfico de Internet específico puede ser otra causa de falla.
5. Conclusión
En este tutorial rápido, hemos discutido la excepción común de la red Java, java.net.ConnectException .
Comenzamos con una explicación de las posibles causas de esa excepción. Mostramos cómo detectar la excepción mediante programación, junto con dos comandos CLI útiles que pueden ayudar a determinar la causa.
Como siempre, el código que se muestra en este artículo está disponible en GitHub.