2017-05-17 4 views
0

우리의 프로젝트는 제대로 작동하는 데 사용되는 푸시에 대한 NIO에 해결할 긴 연결 프레임 워크 기반 구현합니다. 최근 몇 가지 문제가있다 "SocketChannel.read (ByteBuffer를)"던져 예외가 "java.net.SocketException의 :에 recvfrom 실패 : ECONNRESET (피어에 의해 연결 재설정)"를 다음과 같이 세부 사항은 다음과 같습니다 enter image description here는 (의 ByteBuffer는) java.net.SocketException가 던져 :에 recvfrom 실패 : ECONNRESET (피어에 의해 연결 재설정)

나는 유사한 오류, BU를 많이 찾았다 한

private void read(ByteBuffer byteBuffer, int length) throws Exception { 
     int count = 0; 
     long readBeginMills = SystemClock.elapsedRealtime(); 
     while (count < length) { 
      try { 
       int readCount = mSocketChannel.read(byteBuffer); 
       long nowMills = SystemClock.elapsedRealtime(); 
       if (readCount > 0) { 
        count += readCount; 
        readBeginMills = nowMills; 
       } 
       //1.readCount为-1时是连接断开了,直接报错重连 
       //2.如果读取数据超过了20s也报错重连 
       if(nowMills - readBeginMills >= 20000 || readCount == -1){ 
        throw new LostTcpByteException("byte lost exception,need to shutdown and reconnection"); 
       } 
      } catch (Exception e) { 
       throw e; 
      } 
     } 
    } 

다음과 같이 이미지 오류 메시지가

오류에 대한 코드가 포함되어 있습니다 문제를 해결하기 위해 좋은 아이디어를 찾지 못하면 어떻게해야합니까? 귀하의 anwsers 주셔서 감사!

+0

예외는이 광고로부터 던져 –

답변

2

다음 중 하나를

  1. 당신은 거기에있는 동안 이미
  2. 피어가 연결을 종료 피어에 의해 폐쇄되었다 연결 데이터 여전히 소켓에 읽지 않은 데이터가
  3. 를 수신 버퍼를 전송 한 피어가 Windows에서 실행 중이고 해당 프로세스가 종료되었습니다.
  4. 피어는 여기에서 자세히 설명하지 않음으로써 의도적으로 연결을 재설정했습니다.
  5. 연결 시간 초과 또는 오류와 같은 다양한 호스트 또는 네트워크 조건 중 하나가 발생했습니다. "INT readCount = mSocketChannel.read (의 ByteBuffer);"
+0

감사합니다. 서버를 확인해 보겠습니다. –

관련 문제