Java.net.SocketException: Software veroorzaakt aansluiting Abort: RECV Mislukt

Ik heb geen adequaat antwoord kunnen vinden op wat precies de volgende foutmeldingen is:

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

Opmerkingen:

  • Deze fout is niet verreis en onvoorspelbaar; Hoewel deze foutmelding krijgt, betekent dat alle toekomstige aanvragen voor URI’s ook falen.
  • De enige oplossing die werkt (ook, slechts af en toe) is om Tomcat en / of de eigenlijke machine opnieuw op te starten (Windows in dit geval).
  • De URI is zeker beschikbaar (zoals bevestigd door de browser te vragen om de fetch te doen).

RELEVE CODE:

BufferedReader reader;
try { 
 URL url = new URL(URI);
 reader = new BufferedReader(new InputStreamReader(url.openStream())));
} catch( MalformedURLException e ) { 
 throw new IOException("Expecting a well-formed URL: " + e); 
}//end try: Have a stream
String buffer;
StringBuilder result = new StringBuilder();
while( null != (buffer = reader.readLine()) ) { 
 result.append(buffer); 
}//end while: Got the contents.
reader.close();

1, Autoriteit 100%

Dit betekent meestal dat er een netwerkfout was, zoals een TCP-time-out. Ik zou beginnen met het plaatsen van een Sniffer (Wireshark) op de verbinding om te zien of je problemen kunt zien. Als er een TCP-fout is, zou u het moeten kunnen zien. Ook kunt u uw routerlogboeken controleren, indien dit van toepassing is. Als draadloos overal is betrokken, is dat een andere bron voor dit soort fouten.


2, Autoriteit 90%

Dit gebeurt ook als uw TLS-client niet kan worden geverifieerd door de server die is geconfigureerd om klantauthenticatie te vereisen.


3, Autoriteit 37%

Deze fout treedt op wanneer een verbinding abrupt is gesloten (wanneer een TCP-verbinding wordt gereset, terwijl er nog steeds gegevens in de stuurbuffer zijn). De voorwaarde lijkt erg op een veel meer gebruikelijke ‘verbinding reset door peer’. Het kan sporadisch gebeuren bij het verbinden via internet, maar ook systematisch als de timing gelijk is (bijvoorbeeld met bijhoudende verbindingen op localhost).

Een HTTP-client moet de verbinding opnieuw openen en het verzoek opnieuw proberen. Het is belangrijk om te begrijpen dat wanneer een verbinding in deze toestand is, er geen uitweg is, anders dan om het te sluiten. Elke poging om te verzenden of te ontvangen, produceert dezelfde fout.

Gebruik niet URL.open(), gebruik Apache-Commons Httpclient die een retry-mechanisme, verbindingspool, keep-allive en vele andere functies heeft.

Voorbeeldgebruik:

HttpClient httpClient = HttpClients.custom()
            .setConnectionTimeToLive(20, TimeUnit.SECONDS)
            .setMaxConnTotal(400).setMaxConnPerRoute(400)
            .setDefaultRequestConfig(RequestConfig.custom()
                    .setSocketTimeout(30000).setConnectTimeout(5000).build())
            .setRetryHandler(new DefaultHttpRequestRetryHandler(5, true))
            .build();
// the httpClient should be re-used because it is pooled and thread-safe.
HttpGet request = new HttpGet(uri);
HttpResponse response = httpClient.execute(request);
reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
// handle response ...

4, Autoriteit 13%

heb je toegang tot HTTP-gegevens? Kun je de httpclient-bibliotheek gebruiken in plaats van de standaardbibliotheek? De bibliotheek heeft meer opties en biedt betere foutmeldingen.

http://hc.apache.org/httpclient-3.x/


5, Autoriteit 13%

De enige keer dat ik zoiets heb gezien, is wanneer ik een slechte verbinding heb, of wanneer iemand het stopcontact sluit dat ik gebruik van een andere draadcontext.


6, Autoriteit 7%

Probeer ‘Autoreconnect = TRUE’ toe te voegen aan de JDBC Connection String


7, Autoriteit 3%

Dit gebeurt van tijd tot tijd, hetzij wanneer een verbindingstijden uit of wanneer een externe host hun verbinding beëindigt (gesloten applicatie, computeruitschakeling, enz.). U kunt dit voorkomen door uzelf zelf aansluitingen te beheren en ontkoppelingen in uw toepassing via haar communicatieprotocol te hanteren en vervolgens te bellen met shutdownInputen shutdownOutputom de sessie op te ruimen.


8, Autoriteit 3%

Kijk of u een andere service of programma hebt op de HTTP-poort. Het is me overkomen toen ik probeerde de poort te gebruiken en het werd gemaakt door een ander programma.


9

Als u Netbeans gebruikt om Tomcat te beheren, probeert u HTTP-monitor in Tools – Servers

uit te schakelen

Other episodes