java.net.SocketException: el software provocó la cancelación de la conexión: error de recepción en Java
Este tutorial demuestra cómo resolver el siguiente error en Java:
java.net.SocketException: Software caused connection abort: recv failed
Resuelva la excepción java.net.SocketException: el software provocó la interrupción de la conexión: error de recepción
en Java
La SocketException
es una subclase de IOException
, que ocurre cuando intentamos acceder a un socket. El Software Caused Connection Abort: Recv Failed
aparece cuando se produce un error de red, como un tiempo de espera o el servidor no puede autenticar al cliente TLS.
La mayoría de las veces, este error ocurre cuando se usan plataformas como Tomcat. Este error ocurre cuando la conexión TCP se restablece mientras los datos aún están en el búfer, lo que detiene la conexión abruptamente.
Este error es similar a la excepción Restablecimiento de conexión por pares
. Aquí hay un ejemplo que puede arrojar las excepciones java.net.SocketException: el software provocó el aborto de la conexión: la recepción falló
.
BufferedReader Buffered_Reader;
String URI = "https://www.delftstack.com/";
try {
URL DEMOURL = new URL(URI);
Buffered_Reader = new BufferedReader(new InputStreamReader(DEMOURL.openStream()));
} catch (MalformedURLException e) {
throw new IOException("Enter the correct URL: " + e);
}
String DemoBuffer;
StringBuilder Result_StringBuilder = new StringBuilder();
while (null != (DemoBuffer = Buffered_Reader.readLine())) {
Result_StringBuilder.append(DemoBuffer);
}
Buffered_Reader.close();
El código anterior intenta acceder al cliente HTTP, pero la conexión se cierra abruptamente. El error ocurrirá en la línea:
Buffered_Reader = new BufferedReader(new InputStreamReader(DEMOURL.openStream()));
Esto se debe a que DEMOURL.openStream()
no funcionará correctamente para un cliente HTTP. El uso de Apache Commons HttpClient
resolverá este problema.
El HttpClient
volverá a abrir la conexión y volverá a intentar la solicitud. El uso de la biblioteca HttpClient
nos dará una mejor comprensión de los mensajes de error. El HttpClient
tiene agrupación de conexiones, mecanismo de reintento, mantenimiento de conexión y muchas otras características.
Aquí hay una muestra utilizada para este escenario:
String URI = "https://www.delftstack.com/";
HttpClient Demo_Http_Client =
HttpClients.custom()
.setConnectionTimeToLive(10, TimeUnit.SECONDS)
.setMaxConnTotal(200)
.setMaxConnPerRoute(200)
.setDefaultRequestConfig(
RequestConfig.custom().setSocketTimeout(15000).setConnectTimeout(2500).build())
.setRetryHandler(new DefaultHttpRequestRetryHandler(3, true))
.build();
// the httpClient can be re-used as it is thread-safe and pooled.
HttpGet Http_Get_request = new HttpGet(URI);
HttpResponse Http_Response = Demo_Http_Client.execute(Http_Get_request);
Buffered_Reader = new BufferedReader(new InputStreamReader(Http_Response.getEntity().getContent()));
// handle the response.
El código anterior manejará la operación cliente-servidor correctamente, y si ocurre algún error de red, el HttpClient
volverá a intentar el proceso.
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 FacebookArtículo relacionado - Java Error
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase