de-vraag
  • Otázky
  • Značky
  • Používatelia
Oznámenia
Odmeny
Registrácia
Po registrácii budete informovaní o odpovediach a komentároch na vaše otázky.
Prihlásiť sa
Ak už máte konto, prihláste sa a skontrolujte nové oznámenia.
Za pridané otázky, odpovede a komentáre budú udelené odmeny.
Viac na
Zdroj
Upraviť
Richard Everett
Richard Everett
Question

Čo je príčinou mojej výnimky java.net.SocketException: Connection reset?

Často, ale s prestávkami sa objavuje java.net.SocketException: V našich protokoloch sa vyskytujú chyby typu "Connection reset". Nie sme si istí, odkiaľ vlastne chybaConnection reset` pochádza a ako postupovať pri ladení.

Zdá sa, že problém nesúvisí so správami, ktoré sa snažíme odoslať. Všimnite si, že táto správa nie je "resetovanie pripojenia partnerom".

Máte nejaké návrhy, aké by mohli byť typické príčiny tejto výnimky a ako by sme mohli postupovať?

Tu je reprezentatívny stack trace (com.companyname.mtix.sms je naša zložka):

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:168)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
    at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77)
    at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105)
    at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115)
    at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832)
    at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590)
    at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
    at com.companyname.mtix.sms.services.impl.message.SendTextMessage.sendTextMessage(SendTextMessage.java:127)
    at com.companyname.mtix.sms.services.MessageServiceImpl.sendTextMessage(MessageServiceImpl.java:125)
    at com.companyname.mtix.sms.services.remote.MessageServiceRemoteImpl.sendTextMessage(MessageServiceRemoteImpl.java:43)
    at sun.reflect.GeneratedMethodAccessor203.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
    at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
    at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
    at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
    at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at com.companyname.mtix.sms.http.filters.NoCacheFilter.doFilter(NoCacheFilter.java:63)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at com.companyname.mtix.sms.http.filters.MessageFilter.doFilter(MessageFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:61)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:46)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)
</pre>

Našou zložkou je webová aplikácia spustená pod Tomcatom, ktorá volá webovú službu tretej strany, ktorá posiela SMS správy. Riadok nášho kódu, na ktorom sa vyhodí výnimka, je posledný riadok v úryvku kódu nižšie.

String aggregatorResponse = null;
HttpClient httpClient = prepareHttpClient( username, password );
PostMethod postMethod = preparePostMethod( textUrl );

try {
  SybaseTextMessageBuilder builder = new SybaseTextMessageBuilder();
  URL notifyUrl = buildNotificationUrl( textMessage, codeSetManager );
  String smsRequestDocument = builder.buildTextMessage( textMessage, notifyUrl );
  LOG.debug( "Sybase MT document created as: \n" + smsRequestDocument );

  postMethod.setRequestEntity( new StringRequestEntity( smsRequestDocument ) );
  LOG.debug( "commiting SMS to aggregator: " + textMessage.toString() );
  int httpStatus = httpClient.executeMethod( postMethod );
136 2009-02-25T11:07:06+00:00 3
 Raedwald
Raedwald
Edited question 24 január 2019 в 12:39
Programovanie
java
sockets
socketexception
connection-reset
This question has 1 odpoveď in English, to read them log in to your account.
Solution / Answer
 Mark
Mark
25 február 2009 в 11:30
2009-02-25T11:30:57+00:00
Viac na
Zdroj
Upraviť
#8852030

V javadoc pre SocketException sa uvádza, že je to

Vyhadzuje sa na označenie chyby v základnom protokole, napríklad chyby TCP

Vo vašom prípade sa zdá, že spojenie bolo uzavreté na strane servera. Môže to byť problém s požiadavkou, ktorú posielate, alebo problém na ich strane.

Na pomoc pri odstraňovaní chýb by ste mohli použiť nástroj, ako je Wireshark, na zobrazenie skutočných sieťových paketov. Existuje aj alternatívny klient k vášmu kódu Java, ktorý by ste mohli použiť na testovanie webovej služby? Ak by to bolo úspešné, mohlo by to naznačovať chybu v kóde Java.

Keďže používate klienta Commons HTTP, pozrite si príručku Common HTTP Client Logging Guide. V nej sa dozviete, ako zaznamenávať požiadavky na úrovni HTTP.

HttpClient - HttpClient Logging Practices
hc.apache.org
63
0
 Paul
Paul
25 február 2009 в 11:35
2009-02-25T11:35:41+00:00
Viac na
Zdroj
Upraviť
#8852031

Táto chyba sa vyskytne na strane servera, keď klient uzavrel soketové spojenie skôr, ako sa mohla vrátiť odpoveď cez soket. V scenári webovej aplikácie nie sú všetky tieto situácie nebezpečné, pretože ich možno vytvoriť ručne. Napríklad ukončením prehliadača pred načítaním odpovede.

4
0
Michael Borgwardt
Michael Borgwardt
25 február 2009 в 11:23
2009-02-25T11:23:53+00:00
Viac na
Zdroj
Upraviť
#8852029

Výnimka znamená, že zásuvka bola neočakávane uzavretá z druhej strany. Keďže voláte webovú službu, nemalo by sa to stať - s najväčšou pravdepodobnosťou posielate požiadavku, ktorá spúšťa chybu vo webovej službe.

Skúste v týchto prípadoch zaznamenať celú požiadavku a uvidíte, či si všimnete niečo neobvyklé. V opačnom prípade sa spojte s poskytovateľom webovej služby a pošlite mu zaznamenanú problematickú požiadavku.

3
0
Pridať otázku
Kategórie
Všetky
Technológia
Kultúra / Rekreácia
Život / Umenie
Veda
Profesionálne
Obchod
Používatelia
Všetky
New
Popular
1
Jasur Fozilov
Registered pred 9 hodinami
2
Zuxriddin Muydinov
Registered pred dňom
3
Денис Анненский
Registered pred 3 dňami
4
365
Registered pred týždňom
5
True Image
Registered pred týždňom
DE
EL
ES
FR
ID
IT
JA
KO
NL
PT
RO
RU
SK
SL
TR
ZH
© de-vraag 2022
Zdroj
stackoverflow.com
na základe licencie cc by-sa 3.0 s uvedením autora