Java.Net.ConnectException: conexión agotada
El paquete java.net
tiene muchas funciones que se pueden usar para hacer conexiones con cualquier servidor en Internet y, por lo tanto, se pueden usar para hacer llamadas de descanso como GET
o POST
.
Este tutorial se centrará en el uso de este paquete para realizar llamadas de red básicas y qué errores se pueden enfrentar y resolver.
Hacer llamadas de red con java.net
en Java
Hacer llamadas de red es una de las cosas más importantes a las que se enfrentan a diario los desarrolladores de Java. Hacer llamadas de red correctamente puede hacer que la aplicación sea más robusta y brindar una buena experiencia de usuario.
El paquete java.net
tiene muchas funciones asociadas con la realización de llamadas de red.
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
class Main {
public static void main(String args[]) throws Exception {
HttpURLConnection.setFollowRedirects(true); // Defaults to true
String url = "https://www.delftstack.com/howto/java/";
URL request_url = new URL(url);
HttpURLConnection http_conn = (HttpURLConnection) request_url.openConnection();
http_conn.setConnectTimeout(100000);
http_conn.setReadTimeout(100000);
http_conn.setInstanceFollowRedirects(true);
System.out.println(String.valueOf(http_conn.getResponseCode()));
}
}
El segmento de código anterior realiza una solicitud GET
a la variable url
y luego abre una conexión. Si todo funciona, imprime el código de respuesta de 200
.
Sin embargo, después de demasiados intentos, falla al conectarse al servidor y puede generar una IOException
.
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
class Main {
public static void main(String args[]) throws Exception {
URL url = new URL("https://reqres.in/api/users");
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.setRequestMethod("POST");
http.setDoOutput(true);
http.setRequestProperty("Content-Type", "application/json");
http.setRequestProperty("Content-Length", "0");
String body = "{\"name\": \"morpheus\",\"job\": \"leader\"}";
http.getOutputStream().write(body.getBytes("UTF8"));
System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
}
}
El segmento de código anterior realiza una solicitud POST
a un servidor API REST de muestra y devuelve la respuesta.
Error en el Paquete java.net
en Java
Puede haber un problema de Tiempo de espera de conexión agotado
al realizar llamadas de red en Java. Solucionar esos problemas a veces es similar a por qué una determinada URL no se abre en un navegador.
Pueden deberse a:
- La IP/dominio de la URL es incorrecta.
- El servidor correspondiente a la IP/dominio está caído.
- Es posible que un firewall haya bloqueado las solicitudes o que Internet esté detrás de un proxy.
- El servidor puede tener una lista de bloqueo de la IP.
Por ejemplo:
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
class Main {
public static void main(String args[]) throws Exception {
URLConnection urlConnection = null;
OutputStream outputStream = null;
URL url = new URL("http://google.com");
urlConnection = url.openConnection();
urlConnection.setConnectTimeout(1);
}
}
Producción :
Exception in thread "main" java.net.SocketTimeoutException: Connect timed out
at java.base/java.net.Socket.connect(Socket.java:648)
at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
at java.base/sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
...
Por lo tanto, la excepción anterior se produce cuando no se puede abrir una conexión adecuada al socket o la URL, y la combinación de puertos o el tiempo de espera son insuficientes para conectarse a la URL, que en este caso está restringida por urlConnection.setConnectTimeout(1);
.
Se puede intentar lo siguiente para evitar el error Tiempo de espera de conexión agotado
en Java.
- Configuración de la duración del contenido a través de
setFixedLengthStreamingMode()
. - Hacer reintentos a la conexión en caso de que falle la conexión URL en el primer intento.
- Aumentar el límite de conexión a una cantidad mayor mediante la función
setConnectTimeout
.
Artículo relacionado - Java Exception
- Arreglar Java.Net.SocketException: error de tubería rota en Java
- Clase de excepción Java Throwable VS
- Comprender la excepción de tiempo de ejecución en Java
- Corrija la excepción Java.Net.BindException: la dirección ya está en uso: Bind
- El proceso de Java Gateway se cerró antes de enviar su número de puerto
- Excepción de entrada no válida en Java