programing

java.net의 원인Socket Exception:연결을 재설정하시겠습니까?

yoursource 2022. 12. 21. 23:09
반응형

java.net의 원인Socket Exception:연결을 재설정하시겠습니까?

볼 수 있다.java.net.SocketException: Connection reset에러가 기록되고 있습니다. 알 수 .Connection reset에러는 실제로 발생하고 있습니다.또, 디버깅의 방법을 나타냅니다.

이 문제는 보내려는 메시지와는 관련이 없는 것으로 보입니다.메시지는 다음과 같습니다. connection reset by peer.

이 예외의 일반적인 원인과 대처 방법에 대해 제안해 주실 수 있습니까?

스택트레이스(</FONT CHANGE: >)를 나타냅니다.FONT CHANGE:>)를 나타냅니다.com.companyname.mtix.sms을 사용하다)


java.net 를 참조해 주세요.Socket Exception:접속 리셋java.net 에 접속해 주세요.SocketInputStream.read(SocketInputStream).자바:168)java.io 에 접속해 주세요.BufferedInputStream.fill(BufferedInputStream).자바:218)java.io 에 접속해 주세요.BufferedInputStream.read(BufferedInputStream).자바:235)
org.syslog.syslogclient로 이동합니다.HttpParser.readRawLine(HttpParser.java:77)org.syslog.syslogclient로 이동합니다.HttpParser.readLine(HttpParser.java:105)org.syslog.syslogclient로 이동합니다.HttpConnection.readLine(HttpConnection.java:1115)org.syslog.syslogclient로 이동합니다.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832)org.syslog.syslogclient로 이동합니다.HttpMethodBase.readResponse(HttpMethodBase.java:1590)org.syslog.syslogclient로 이동합니다.Http Method Base 。execute(HttpMethodBase.java:995)org.syslog.syslogclient로 이동합니다.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397)org.syslog.syslogclient로 이동합니다.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)org.syslog.syslogclient로 이동합니다.HttpClient.executeMethod(HttpClient.java:396)org.syslog.syslogclient로 이동합니다.HttpClient.executeMethod(HttpClient.java:324)com.companyname.mtix.services.services.services.message로 이동합니다.SendTextMessage.sendTextMessage(SendTextMessage).Java: 개요)com.companyname.mtix.services로 이동합니다.MessageServiceImpl.sendTextMessage(MessageServiceImpl.java:125)com.companyname.mtix.services.remote로 이동합니다.MessageServiceRemoteImpl.sendTextMessage(MessageServiceRemoteImpl.java:43)햇빛을 반사하다GeneratedMethodAccessor203.invoke(알 수 없는 소스)햇빛을 반사하다Method Accessor Impl을 위임하고 있습니다.호출(Delegating Method Accessor Impl.java:25)java.displect.reflect에 있습니다.Method.invoke(Method.java:585)org.disc.axis.disc.disc.disc.RPProvider.invokeMethod(RPCProvider.java:397)org.disc.axis.disc.disc.disc.RPCProvider.processMessage(RPCProvider.java:186)org.disc.axis.disc.disc.disc.Java Provider.호출(JavaProvider.java:323)org.darg.axis. strategy에 있습니다.InvocationStrategy.visit(InvocationStrategy).자바: 32)org.disc.axis 에 있습니다.SimpleChain.doVisiting(SimpleChain.java:118)org.disc.axis 에 있습니다.SimpleChain.invoke(SimpleChain.java:83)org.disc.axis.disc.disc.disc.SOAPService(SOAPService 。호출(SOAPService)자바:453)org.dis.axis.server로 이동합니다.AxisServer.invoke(AxisServer.java:281)org.disc.axis.disc.disc.disc.Axis Servlet.doPost(Axis Servlet.java:699)
javax.servlet.disples로 이동합니다.HttpServlet.service(HttpServlet.java:709)org.disc.axis.disc.disc.disc.Axis Servlet Base 。service(Axis Servlet Base).Java:327)javax.servlet.disples로 이동합니다.HttpServlet.service(HttpServlet.java:802)org.dev.inna.core에 있습니다.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
org.dev.inna.core에 있습니다.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)를 참조해 주세요.NoCacheFilter.doFilter(NoCacheFilter.java:63)org.dev.inna.core에 있습니다.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)org.dev.inna.core에 있습니다.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)를 참조해 주세요.MessageFilter.doFilter(MessageFilter.java:53)org.dev.inna.core에 있습니다.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)org.dev.inna.core에 있습니다.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)org.springframework.web.filter에 있습니다.Request Context Filter.do Filter내부(Request Context Filter.java:61)org.springframework.web.filter에 있습니다.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)org.dev.inna.core에 있습니다.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)org.dev.inna.core에 있습니다.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)org.http.nowledgewhere에서 확인할 수 있습니다.AAFilter.doFilter(AAFilter.java:46)org.dev.inna.core에 있습니다.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)org.dev.inna.core에 있습니다.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)org.dev.inna.core에 있습니다.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
org.dev.inna.core에 있습니다.Standard Context Valve.invoke(Standard Context Valve.java:178)org.dev.inna.core에 있습니다.표준.HostValve.invoke(표준)HostValve.java:126)org.g.g.g.g.g.g.g.g.gErrorReportValve.invoke(ErrorReportValve.java:105)org.g.g.g.g.g.g.g.g.gAccessLogValve.invoke(AccessLogValve.java:541)org.dev.inna.core에 있습니다.Standard Engine Valve.invoke(Standard Engine Valve.java:107)org.g.g.g.g.g.g.g.g.g코요테 어댑터서비스(CoyoteAdapter.java:148)org.disc.siscote에 있습니다.http11.Http11Processor.process(Http11Processor.java:869)org.disc.siscote에 있습니다.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol).자바:664)
org.apache.tomcat.util.net 에 접속해 주세요.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)org.apache.tomcat.util.net 에 접속해 주세요.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)org.g.g.g.g.g.g.g.g.g.gThreadPool$ControlRunnable.run(ThreadPool.java:684)를 참조해 주세요.Thread.run(Thread.java:595)    

당사의 컴포넌트는 Tomcat에서 실행되는 웹 어플리케이션으로, SMS 메시지를 보내는 서드파티 웹 서비스를 호출합니다.예외가 발생하는 코드의 행은 아래 코드 스니펫의 마지막 행입니다.

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

socketException의 javadoc은 다음과 같이 기술되어 있습니다.

TCP 오류와 같은 기본 프로토콜에 오류가 있음을 나타내기 위해 느려집니다.

이 경우 서버 측에서 접속이 종료된 것 같습니다.이것은, 송신하고 있는 요청의 문제이거나, 송신측의 문제일 가능성이 있습니다.

디버깅에 도움이 되도록 Wireshark 등의 도구를 사용하여 실제 네트워크 패킷을 표시할 수 있습니다.또한 웹 서비스 테스트에 사용할 수 있는 Java 코드 대체 클라이언트가 있습니까?이것이 성공하면 Java 코드의 버그를 나타낼 수 있습니다.

Commons HTTP Client를 사용하는 경우 Common HTTP Client Logging Guide를 참조하십시오.HTTP 수준에서 요청을 기록하는 방법에 대해 설명합니다.

에러는, 다른 쪽이 아니고, 유저측에서 발생합니다.상대방이 접속을 리셋 했을 경우는, 예외 메세지에 다음과 같이 표시됩니다.

java.net.SocketException reset by peer

은 '내부 입니다.HttpClient연결을 되지 않습니다.SSL의 오래된 연결을 확인해도 이 오류가 수정되지 않습니다.해결책: 클라이언트를 덤프하고 다시 만듭니다.

Glassfish3 서버에 배치된 웹 서비스에 액세스하려고 하면 http-thread-pool 설정을 조정할 수 있습니다.다수의 동시 스레드가 웹 서비스를 호출할 때 Socket Exceptions를 수정했습니다.

  1. 관리 콘솔로 이동
  2. [ Configurations ]-> [ Server config ]-> [ Thread Pool ]-> [ http - thread - pool ]으로 이동합니다.
  3. "최대 스레드 풀 크기" 설정을 5에서 32로 변경합니다.
  4. "최소 스레드 풀 크기" 설정을 2에서 16으로 변경합니다.
  5. Glassfish를 재시작합니다.

저도 우연히 이 오류를 발견했어요.제 경우는 TLS1.0을 지원하는 JRE6를 사용하고 있었습니다.서버는 TLS1.2만을 지원하므로 이 오류가 발생하였습니다.

은 Tomcat이 한 Tomcat으로 되어 있기 입니다.maxHttpHeaderSizeSOLR을 사용하다

이게 도움이 됐으면 좋겠네요!

이 오류는 소켓을 통해 응답이 반환되기 전에 클라이언트가 소켓 연결을 닫았을 때 서버 측에서 발생합니다.웹 앱 시나리오에서는 수동으로 만들 수 있기 때문에 이 모든 것이 위험한 것은 아닙니다.예를 들어 응답이 검색되기 전에 브라우저를 종료합니다.

이 오류는 항상 발생하며 정상이라고 생각합니다.

한쪽이 이미 전화를 끊었을 때 읽으려고 할 때 발생합니다.따라서 프로토콜에 따라 문제가 지정되거나 지정되지 않을 수 있습니다.클라이언트 코드가, 서버에 행업 하는 것을 명확하게 나타내고 있는 경우, 클라이언트와 서버가 동시에 행업 할 수 있어 이 메세지는 발생하지 않습니다.

제가 코드를 구현하는 방법은 고객이 작별 인사 없이 전화를 끊는 것입니다.그러면 서버는 오류를 검출하여 무시할 수 있습니다.HTTP의 경우 프로토콜의 한 수준은 연결당 하나 이상의 요청을 허용하는 반면 다른 수준은 허용하지 않는다고 생각합니다.

따라서 한쪽이 다른 한쪽에서 전화를 계속 끊을 가능성이 있다는 것을 알 수 있습니다.당신이 받고 있는 오류는 불법적인 문제가 아닐 수 있으며, 단순히 로그 파일을 채우지 않기 위해 그것을 포착할 수 있습니다.

예외는 소켓이 반대쪽에서 갑자기 닫혔음을 의미합니다.웹 서비스를 호출하고 있기 때문에 이 문제는 발생하지 않습니다.대부분 웹 서비스에서 버그를 트리거하는 요청을 보내고 있습니다.

이러한 경우 요청 전체를 기록하여 이상 징후가 있는지 확인하십시오.그렇지 않은 경우 웹 서비스 공급자에게 연락하여 기록된 문제 요청을 보내십시오.

이 실이 좀 오래된 건 알지만, 제 2센트를 더하고 싶습니다.릴리스 직후에 같은 「접속 리셋」에러가 발생했습니다.

의 '우리'가 ' '우리'의 '우리'가apache서버가 도입용으로 다운되었습니다.합니다.apache접속이 다운되어 리셋 에러가 발생하고 있었습니다.

은 입니다만, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.java.net.SocketException: Connection reset★★★★★★★★★★★★★★★★★★,

서버 측 응용 프로그램의 슬롯링 설정이 한 번에 하나의 연결만 허용하도록 변경되었습니다.따라서 콜이 통과하거나 통과되지 않을 수 있습니다.슬롯링 설정을 변경하여 문제를 해결했습니다.

읽으려고 했던 텍스트 파일에 방화벽의 안티바이러스 서명과 일치하는 문자열이 포함되어 있을 때 이 오류가 발생했습니다.

FWIW, 이 에러는, POST 요구를 상정하고 있는 엔드 포인트에 GET 요구를 잘못했을 때에 발생하고 있었습니다.아마도 그것은 문제를 처리하는 특정 서버 방식이었을 것입니다.

나도 그 에러가 발생하고 있었다.Connection reset by peer예외는 Spring의 REST 템플릿에 의해 발생합니다.postForObject()방법.저에게 문제는 너무 긴HTTP URL 요구였습니다.따라서 먼저 생성된 URL이 적절한지 여부를 확인하고 서버가 해당 길이의 요청을 처리할 수 있어야 하는 경우 서버 설정으로 이동하여 URL 요청의 기본 허용 길이를 높입니다.

이것으로 문제는 해결되었지만, 일부 인터넷 브라우저, 특히 오래된 브라우저에서는 응용 프로그램이 실행되지 않을 수 있습니다.이는 URL 요청의 최대 길이가 고정되어 있기 때문입니다.

도움이 됐으면 좋겠는데...

접속하려고 했던 포트가 닫혀 있었기 때문에 이 에러가 발생하고 있습니다.

언급URL : https://stackoverflow.com/questions/585599/whats-causing-my-java-net-socketexception-connection-reset

반응형