Error java.net.ConnectException en Java

Sheeraz Gul 12 octubre 2023
Error java.net.ConnectException en Java

Este tutorial demuestra el error java.net.ConnectException en Java.

el error java.net.ConnectException en Java

La excepción java.net.ConnectException es la excepción más común al trabajar con redes. Ocurre principalmente cuando se realiza una conexión TCP entre el cliente, la aplicación y el servidor.

Es una aplicación comprobada que se puede manejar en el código usando los bloques try-catch. Esta excepción es una subclase de la excepción IO.

Aquí está la jerarquía de esta excepción:

     java.lang.Object
        java.lang.Throwable
            java.lang.Exception
                java.io.IOException
                    java.net.SocketException
                        java.net.ConnectException

Estas son las posibles razones de esta excepción:

  1. Cuando un cliente y un servidor no están en la misma red, ambos deben estar en la red como Internet o LAN; de lo contrario, lanzará la ConnectException.
  2. Cuando el servidor no se está ejecutando. Por lo general, los puertos como 3306 (MySQL), 8080 (para Tomcat), 27017 (MongoDB) y 3000 o 4200 (para React/Angular) están completamente inactivos u ocupados por alguna otra entidad, y arrojará la ConnectException.
  3. Cuando la seguridad está impidiendo la comunicación, por ejemplo, en el caso de un Firewall. En este caso, lanzará la ConnectException.
  4. Cuando se anula la configuración, es posible que el servidor se esté ejecutando pero que esté listado en los puertos, arrojará la ConnectException.
  5. Cuando la cadena de conexión no es correcta, por ejemplo, Connection DemoConnection = DriverManager.getConnection(jdbc:mysql://localhost/:3306?+user=&password= );. Lanzará la ConnectException.
  6. Cuando se da por error un número de puerto incorrecto, lanzará la ConnectException.

Probemos un ejemplo para ConnectException:

package delftstack;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.*;
import java.util.*;

public class Example {
  public static void main(String[] args) throws IOException {
    String Host_Name = "127.0.0.1";
    int Port_Number = 808;

    Socket New_Socket = new Socket(Host_Name, Port_Number);

    InputStream Input_Stream = New_Socket.getInputStream();
    InputStreamReader Input_Stream_Reader = new InputStreamReader(Input_Stream);
    int Demo_Data;

    StringBuilder Output_String = new StringBuilder();
    while ((Demo_Data = Input_Stream_Reader.read()) != -1) {
      Output_String.append((char) Demo_Data);
    }
  }
}

El código anterior arrojará la ConnectException porque el puerto y la IP no son válidos. Ver salida:

Exception in thread "main" java.net.ConnectException: Connection refused: connect
    at java.base/sun.nio.ch.Net.connect0(Native Method)
    at java.base/sun.nio.ch.Net.connect(Net.java:579)
    at java.base/sun.nio.ch.Net.connect(Net.java:568)
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
    at java.base/java.net.Socket.connect(Socket.java:633)
    at java.base/java.net.Socket.connect(Socket.java:583)
    at java.base/java.net.Socket.<init>(Socket.java:507)
    at java.base/java.net.Socket.<init>(Socket.java:287)
    at delftstack.Example.main(Example.java:16)

Ahora, podemos manejar la excepción usando los bloques try-catch. Como se trata de una excepción comprobada, es necesario añadir lanzamientos al método.

Veamos la solución:

package delftstack;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.*;
import java.util.*;

public class Example {
  public static void main(String[] args) throws IOException {
    String Host_Name = "127.0.0.1";
    int Port_Number = 808;

    try (Socket New_Socket = new Socket(Host_Name, Port_Number)) {
      InputStream Input_Stream = New_Socket.getInputStream();
      InputStreamReader Input_Stream_Reader = new InputStreamReader(Input_Stream);
      int Demo_Data;

      StringBuilder Output_String = new StringBuilder();
      while ((Demo_Data = Input_Stream_Reader.read()) != -1) {
        Output_String.append((char) Demo_Data);
      }
    }

    catch (ConnectException ex) {
      System.out.println(
          "The Connect Exception  occured becuase the given hostname and port are invalid : "
          + ex.getMessage());
    }
  }
}

Ahora se maneja la excepción, por lo que no bloqueará el código. Ver salida:

The Connect Exception  occured becuase the given hostname and port are invalid : Connection refused: connect
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Java Error