java. net. SocketException: oprogramowanie spowodowało przerwanie połączenia: recv nie powiodło się [duplikat]

To pytanie ma już odpowiedź tutaj:

Nie udało mi się znaleźć odpowiedniej odpowiedzi na to, co dokładnie oznacza następujący błąd:

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

Uwagi:

  • ten błąd jest rzadki i nieprzewidywalny; chociaż uzyskanie ten błąd oznacza, że wszystkie przyszłe żądania Uri również się nie powiedzą.
  • jedynym rozwiązaniem, które działa (również, tylko sporadycznie), jest ponowne uruchomienie programu Tomcat i / lub rzeczywistej maszyny (W Tym Przypadku Windows).
  • URI jest zdecydowanie dostępny(co potwierdza Prośba przeglądarki o pobranie).

Odpowiedni kod:

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();
Author: grammar31, 2008-09-26

10 answers

Zazwyczaj oznacza to, że wystąpił błąd sieci, np. timeout TCP. Chciałbym zacząć od umieszczenia sniffera (wireshark) na połączeniu, aby sprawdzić, czy nie widzisz żadnych problemów. Jeśli wystąpi błąd TCP, powinieneś być w stanie go zobaczyć. Możesz również sprawdzić dzienniki routera, jeśli ma to zastosowanie. Jeśli sieć bezprzewodowa jest zaangażowana w dowolnym miejscu, jest to inne źródło tego rodzaju błędów.

 22
Author: AdamC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:50:21

Dzieje się tak również wtedy, gdy klient TLS nie może być uwierzytelniony przez serwer skonfigurowany tak, aby wymagał uwierzytelniania klienta.

 19
Author: desbocages,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-22 12:53:03

Ten błąd występuje, gdy połączenie jest nagle zamknięte(gdy połączenie TCP jest resetowane, gdy w buforze wysyłania są jeszcze DANE). Warunek jest bardzo podobny do znacznie bardziej popularnego "Reset połączenia przez peera". Może się to zdarzyć sporadycznie podczas łączenia się przez Internet, ale także systematycznie, jeśli odpowiedni czas jest odpowiedni(np. w przypadku połączeń keep-alive na localhost).

Klient HTTP powinien ponownie otworzyć połączenie i ponowić próbę żądania. Ważne jest, aby zrozumieć, że gdy połączenie jest w tym stanie, nie ma innego wyjścia niż jego zamknięcie. Każda próba wysłania lub odbioru spowoduje ten sam błąd.

Nie używaj URL.open(), używaj Apache-Commons HttpClient, który ma mechanizm retry, pooling połączeń, keep-alive i wiele innych funkcji.

Przykładowe użycie:

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 ...
 5
Author: rustyx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-30 07:56:08

Jedyny raz widziałem, jak coś takiego się dzieje, gdy mam złe połączenie lub gdy ktoś zamyka Gniazdo, którego używam z innego kontekstu wątku.

 4
Author: pfranza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:49:56

Czy masz dostęp do danych http? Czy Można używać biblioteki HttpClient zamiast biblioteki standardowej? Biblioteka ma więcej opcji i zapewnia lepsze komunikaty o błędach.

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

 3
Author: Ken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 20:49:26

Spróbuj dodać 'autoReconnect = true' do łańcucha połączeń jdbc

 2
Author: Anantharaman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-28 06:54:00

Zdarza się to od czasu do czasu, gdy połączenie zostanie przerwane lub gdy zdalny host zakończy połączenie (zamknięta aplikacja, wyłączenie komputera itp.). Możesz tego uniknąć, samodzielnie zarządzając gniazdami i obsługując rozłączenia w aplikacji za pośrednictwem protokołu komunikacyjnego, a następnie dzwoniąc shutdownInput i shutdownOutput, aby wyczyścić sesję.

 1
Author: Michael J. Gray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-20 12:32:40

Sprawdź, czy na porcie http działa inna usługa lub program. Przydarzyło mi się to, gdy próbowałem użyć portu i zostało zrobione przez inny program.

 1
Author: trinity,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-24 14:59:30

Jeśli używasz Netbeans do zarządzania Tomcat, spróbuj wyłączyć monitor HTTP w narzędziach-Serwery

 0
Author: Maroš Košina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-11 11:15:18

Ja też miałem ten problem. Moje rozwiązanie to:

sc.setSoLinger(true, 10);

Kopiowanie ze strony internetowej -- > używając metody setSoLinger(), można jawnie ustawić opóźnienie przed wysłaniem resetu, dając więcej czasu na odczyt lub wysłanie danych.

Może to nie jest odpowiedź dla wszystkich, ale dla niektórych ludzi.
 0
Author: Sergio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-25 06:05:51