HOWTO · Java
Java.Net.SocketTimeoutException: conexión agotada
En el artículo de hoy, hablaremos de java.net.SocketTimeoutException: se agotó el tiempo de espera de la conexión.
En esta página
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.
- El servidor está funcionando bien. Sin embargo, el valor de
tiempo de esperase establece para un tiempo más corto. Por lo tanto, aumente el valor deltimeout. - En el host remoto, ningún servicio está escuchando el puerto especificado.
- No se envía ninguna ruta al host remoto.
- El host remoto no parece permitir ninguna conexión.
- Hay un problema para comunicarse con el host remoto.
- 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.
-
Del lado del cliente, lo primero que haremos será construir un
socketnulo. Después de eso, usaremos el métodoconnect()y luego configuraremos el parámetrotimeoutdonde 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); -
Si desea establecer un valor de
tiempo de esperadesde el lado del servidor, puede usar la funciónsetSoTimeout(). El valor del parámetrotimeoutdetermina el tiempo que se bloqueará la funciónServerSocket.accept().ServerSocket servers = new new ServerSocket(port); servers.setSoTimeout(10000);Del mismo modo, el
tiempo de esperadebe ser superior a 0 milisegundos. Si eltiempo de esperaexpira antes de que el método regrese, el método generará unaSocketTimeoutException. -
Determinar un tiempo de espera de conexión y luego manejarlo usando un bloque
try-catches otra técnica excelente para lidiar conHttpException.HttpUrlConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(8000);