java.net.SocketException: Software verursacht Verbindungsabbruch: Recv in Java fehlgeschlagen

Sheeraz Gul 12 Oktober 2023
java.net.SocketException: Software verursacht Verbindungsabbruch: Recv in Java fehlgeschlagen

Dieses Tutorial zeigt, wie Sie den folgenden Fehler in Java beheben:

java.net.SocketException: Software caused connection abort: recv failed

Beheben Sie die java.net.SocketException: Software Caused Connection Abort: Recv Failed in Java

Die SocketException ist eine Unterklasse von IOException, die auftritt, wenn wir versuchen, auf einen Socket zuzugreifen. Der Software Caused Connection Abort: Recv Failed erscheint, wenn ein Netzwerkfehler wie ein Timeout vorliegt oder der Server den TLS-Client nicht authentifizieren kann.

Meistens tritt dieser Fehler auf, wenn Plattformen wie Tomcat verwendet werden. Dieser Fehler tritt auf, wenn die TCP-Verbindung zurückgesetzt wird, während sich noch Daten im Puffer befinden, wodurch die Verbindung abrupt beendet wird.

Dieser Fehler ähnelt der Ausnahme Connection Reset by Peers. Hier ist ein Beispiel, das die Ausnahmen java.net.SocketException: Software cause connection abort: recv failed auslösen kann.

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();

Der obige Code versucht, auf den HTTP-Client zuzugreifen, aber die Verbindung wird abrupt geschlossen. Der Fehler tritt in der Zeile auf:

Buffered_Reader = new BufferedReader(new InputStreamReader(DEMOURL.openStream()));

Dies liegt daran, dass DEMOURL.openStream() für einen HTTP-Client nicht richtig funktioniert. Die Verwendung von Apache Commons HttpClient löst dieses Problem.

Der HttpClient öffnet die Verbindung erneut und versucht die Anfrage erneut. Die Verwendung der Bibliothek HttpClient hilft uns, die Fehlermeldungen besser zu verstehen. Der HttpClient verfügt über Connection Pooling, Retry-Mechanismus, Keep-Alive und viele weitere Features.

Hier ist ein Beispiel für dieses Szenario:

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.

Der obige Code behandelt den Client-Server-Betrieb ordnungsgemäß, und wenn ein Netzwerkfehler auftritt, wiederholt der HttpClient den Vorgang.

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

Verwandter Artikel - Java Error