Java.Net.SocketTimeoutException: conexión agotada

Muhammad Zeeshan 12 octubre 2023
  1. Enchufes en Java
  2. Tiempos de espera en Java
  3. Causas de java.net.SocketTimeoutException: conexión agotada en Java
  4. Solución a java.net.SocketTimeoutException: Conexión agotada en Java
Java.Net.SocketTimeoutException: conexión agotada

En el artículo de hoy, hablaremos de java.net.SocketTimeoutException: conexión agotada. Pero primero, echemos un vistazo más de cerca a los conceptos de sockets y tiempos de espera.

Enchufes en Java

Un enlace lógico entre dos aplicaciones informáticas puede tener múltiples puntos finales, uno de los cuales es un socket.

En otras palabras, es una interfaz lógica que utilizan las aplicaciones para transmitir y recibir datos a través de una red. Una dirección IP y un número de puerto comprenden un socket en su forma más básica.

Se asigna un número de puerto único a cada socket, que se utiliza para identificar el servicio. Los servicios basados en conexión usan sockets de flujo que se basan en TCP.

Debido a esto, Java ofrece la clase java.net.Socket como una opción de programación del lado del cliente.

Por otro lado, la clase java.net.ServerSocket se utiliza en la programación TCP/IP del lado del servidor. El socket de datagrama basado en UDP es otro tipo de socket, y es el que se emplea para servicios sin conexión.

Java admite java.net.DatagramSocket para operaciones UDP.

Tiempos de espera en Java

Se crea una instancia de un objeto socket cuando se llama al constructor socket, lo que permite una conexión entre el cliente y el servidor desde el lado del cliente.

Como entrada, el constructor espera recibir la dirección del host remoto y el número de puerto. Después de eso, intenta usar los parámetros proporcionados para establecer una conexión con el host remoto.

La operación evitará que continúen otros procesos hasta que se cree una conexión exitosa. Pero, la aplicación arrojará el siguiente error si la conexión no se realiza correctamente después de un tiempo específico.

java.net.SocketTimeoutException : Connection timed out

Al escuchar las solicitudes de conexión entrantes, la clase ServerSocket en el lado del servidor está permanentemente activa. Cuando ServerSocket recibe una solicitud de conexión, se invoca la función aceptar para crear un nuevo objeto socket.

Similar al método anterior, este bloquea hasta que se conecta el cliente remoto.

Causas de java.net.SocketTimeoutException: conexión agotada en Java

Las siguientes son algunas posibles razones del error.

  1. El servidor está funcionando bien. Sin embargo, el valor de tiempo de espera se establece para un tiempo más corto. Por lo tanto, aumente el valor del timeout.
  2. En el host remoto, ningún servicio está escuchando el puerto especificado.
  3. No se envía ninguna ruta al host remoto.
  4. El host remoto no parece permitir ninguna conexión.
  5. Hay un problema para comunicarse con el host remoto.
  6. La conexión a Internet es lenta o no está disponible.

Solución a java.net.SocketTimeoutException: Conexión agotada en Java

Podemos preestablecer la opción de tiempo de espera para las actividades del cliente y del servidor. Agregar las construcciones try y catch sería una solución adecuada.

  1. Del lado del cliente, lo primero que haremos será construir un socket nulo. Después de eso, usaremos el método connect() y luego configuraremos el parámetro timeout donde el tiempo de espera debe ser mayor a 0 milisegundos.

    Si el tiempo de espera expira antes de que la función regrese, se lanza SocketTimeoutException.

    Socket s = new Socket();
    SocketAddress sAdres = new InetSocketAddress(host, port);
    s.connect(sAdres, 50000);
    
  2. Si desea establecer un valor de tiempo de espera desde el lado del servidor, puede usar la función setSoTimeout(). El valor del parámetro timeout determina el tiempo que se bloqueará la función ServerSocket.accept().

    ServerSocket servers = new new ServerSocket(port);
    servers.setSoTimeout(10000);
    

    Del mismo modo, el tiempo de espera debe ser superior a 0 milisegundos. Si el tiempo de espera expira antes de que el método regrese, el método generará una SocketTimeoutException.

  3. Determinar un tiempo de espera de conexión y luego manejarlo usando un bloque try-catch es otra técnica excelente para lidiar con HttpException.

    HttpUrlConnection conn = (HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(8000);
    
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn

Artículo relacionado - Java Error