Apa's menyebabkan saya jawa.net.SocketException: Connection reset?

Kita melihat sering tapi intermiten jawa.net.SocketException: Connection reset kesalahan dalam log. Kami tidak yakin ke mana Koneksi reset kesalahan sebenarnya datang dari, dan bagaimana untuk pergi tentang debugging.

Masalah ini tampaknya tidak berhubungan dengan pesan yang kita mencoba untuk mengirim. Perhatikan bahwa pesan adalah tidak connection reset by peer.

Saran tentang apa yang khas penyebab pengecualian ini mungkin, dan bagaimana kita bisa melanjutkan?

Berikut ini adalah wakil stack trace (com.companyname.mtix.sms adalah komponen):

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>

Kami adalah komponen aplikasi web, yang berjalan di bawah Tomcat, bahwa panggilan ketiga layanan Web pihak yang mengirimkan pesan SMS, jadi hal itu terjadi. Baris kode kita yang mendapat pengecualian dilemparkan dari adalah baris terakhir di potongan kode di bawah ini.

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 );
Mengomentari pertanyaan (1)
Larutan

Awal untuk SocketException menyatakan bahwa itu adalah

Dilemparkan untuk menunjukkan bahwa ada kesalahan dalam protokol seperti TCP kesalahan

Dalam kasus anda, tampaknya bahwa koneksi telah ditutup oleh server ujung sambungan. Ini bisa menjadi masalah dengan permintaan anda mengirim atau masalah pada akhir mereka.

Untuk membantu debugging anda bisa melihat menggunakan alat seperti Wireshark untuk melihat sebenarnya paket-paket jaringan. Juga, ada alternatif klien untuk kode Java yang bisa anda gunakan untuk menguji layanan web? Jika ini berhasil, maka bisa menunjukkan bug dalam kode Java.

Seperti anda menggunakan Commons HTTP Client silahkan lihat di Umum Klien HTTP Penebangan Panduan. Ini akan memberitahu anda bagaimana untuk log permintaan di HTTP tingkat.

Komentar (6)

Kesalahan ini terjadi di sisi anda dan BUKAN sisi yang lain. Jika sisi lain me-reset koneksi, maka pengecualian pesan harus mengatakan:

java.net.SocketException reset by peer

Penyebabnya adalah koneksi dalam HttpClient basi. Cek basi koneksi SSL tidak memperbaiki kesalahan ini. Solusi: dump klien anda dan menciptakan.

Komentar (0)

Jika anda mengalami hal ini mencoba untuk mengakses Web services digunakan pada Glassfish3 server, anda mungkin ingin untuk menyetel http-benang-renang pengaturan. Yang tetap SocketExceptions kita punya ketika banyak benang bersamaan memanggil layanan web.

  1. Masuk ke konsol admin
  2. Menavigasi ke "Konfigurasi"->"Server config"->"Benang outdoor"->"http-benang-kolam renang".
  3. Mengubah pengaturan "Max Benang Ukuran kolam Renang" dari 5 ke 32
  4. Mengubah pengaturan "Min Benang Ukuran kolam Renang" dari 2 sampai 16
  5. Restart Glassfish.
Komentar (1)

Saya juga tersandung kesalahan ini. Dalam kasus saya, masalah saya menggunakan JRE6, dengan dukungan untuk TLS1.0. Server hanya didukung TLS1.2, jadi ini kesalahan dilemparkan.

Komentar (3)

Dalam kasus saya, ini karena saya Tomcat ditetapkan dengan cukup maxHttpHeaderSize untuk waktu yang sangat rumit SOLR query.

Semoga ini bisa membantu seseorang di luar sana!

Komentar (0)

Saya mendapatkan error ini semua waktu dan menganggapnya normal.

Hal itu terjadi ketika salah satu pihak mencoba untuk membaca ketika sisi lain telah digantung. Dengan demikian tergantung pada protokol ini mungkin atau mungkin tidak menetapkan masalah. Jika klien saya kode khusus yang menunjukkan ke server yang akan menutup, maka kedua klien dan server dapat menutup pada waktu yang sama dan pesan ini tidak akan terjadi.

Cara saya menerapkan kode saya adalah bagi klien untuk hanya menutup telepon tanpa mengucapkan selamat tinggal. Server kemudian dapat menangkap kesalahan dan mengabaikan hal itu. Dalam konteks HTTP, saya percaya satu tingkat dari protokol yang memungkinkan lebih dari satu permintaan per sambungan sementara yang lain tidak't.

Sehingga anda dapat melihat bagaimana berpotensi satu sisi bisa terus menggantung di sisi lain. Aku ragu kesalahan yang anda terima dari setiap bajak laut kepedulian dan anda hanya bisa menangkap hal itu untuk menjaga dari mengisi file log anda.

Komentar (2)

Kesalahan ini terjadi pada sisi server ketika klien menutup sambungan soket sebelum respon bisa kembali lebih dari soket. Dalam aplikasi web skenario tidak semua dari mereka adalah berbahaya, karena mereka dapat dibuat secara manual. Misalnya, dengan berhenti browser sebelum respon diambil.

Komentar (1)

Pengecualian berarti bahwa soket tertutup secara tiba-tiba dari sisi lain. Karena anda memanggil layanan web, hal ini seharusnya tidak terjadi - kemungkinan besar anda're mengirimkan permintaan yang memicu bug di layanan web.

Coba log seluruh permintaan dalam kasus tersebut, dan lihat apakah anda melihat sesuatu yang tidak biasa. Jika tidak, hubungi penyedia layanan web dan mengirim mereka masuk problematis permintaan.

Komentar (1)

Aku tahu thread ini sedikit tua, tapi ingin menambahkan saya 2 sen. Kita sama-sama "koneksi ulang" error setelah kami salah satu rilis.

Akar penyebab itu, kami apache server dibawa turun untuk penyebaran. Semua pihak ketiga kami lalu lintas berjalan melalui apache dan kita mendapatkan koneksi ulang kesalahan karena hal itu menjadi turun.

Komentar (0)

Ini adalah thread lama, tapi aku berlari ke jawa.net.SocketException: Connection reset kemarin.

Server-side aplikasi yang telah pelambatan pengaturan diubah untuk memungkinkan hanya 1 koneksi pada satu waktu! Dengan demikian, kadang-kadang panggilan pergi melalui dan kadang-kadang tidak. Aku memecahkan masalah dengan mengubah pelambatan pengaturan.

Komentar (0)

Saya mendapatkan persis bahwa kesalahan juga: Connection reset by peer. Pengecualian dibesarkan oleh musim Semi's SISANYA template setelah menjalankan postForObject() metode. Bagi saya masalah itu terlalu panjang URL HTTP request. Jadi periksa dulu apakah URL yang dihasilkan adalah apa yang seharusnya dan, jika server anda benar-benar harus dapat menangani permintaan dari yang panjang, cukup pergi ke server's konfigurasi dan meningkatkan standar yang diizinkan panjang URL permintaan.

Yang memecahkan masalah bagi saya, tapi diketahui: aplikasi ini mungkin tidak berjalan di beberapa browser internet, terutama orang-orang tua, karena mereka telah diperbaiki max panjang URL permintaan.

Semoga membantu...

Komentar (1)

Aku punya kesalahan ini ketika file teks aku mencoba untuk membaca yang terkandung string yang dicocokkan antivirus tanda tangan pada firewall kami.

Komentar (0)

FWIW, saya mendapatkan kesalahan ini ketika saya secara tidak sengaja membuat MENDAPATKAN permintaan untuk sebuah akhir yang mengharapkan permintaan POST. Mungkin itu hanya bahwa server tertentu cara penanganan masalah.

Komentar (0)

Saya mendapatkan error ini karena pelabuhan saya mencoba untuk terhubung ke ditutup.

Komentar (1)