2017-01-02 1 views
-1

SocketChannel 읽기는 문서로 스트림의 끝을 의미하는 "-1"바이트를 계속 읽습니다. ROX NIO 튜토리얼SocketChannel 읽기 계속 -1

그가

if (numRead == -1) { 
    // Remote entity shut the socket down cleanly. Do the 
    // same from our end and cancel the channel. 
    key.channel().close(); 
    key.cancel(); 
    return; 
} 

그러나 나는 그가 맞다 확실하지 않다, 원격 측이 나에게 N 바이트를 보낸 일이 발생할 수 없다는, 기다렸다 오초 (의 더 시간 제한을지지 않습니다하자) 다른 M 바이트를 보내주세요.

read() 메서드를 호출하는 동안 여전히 -1이 반환됩니까? 그렇다면 socketChannel을 닫고 등록을 취소하지 않고 다음 M 바이트를 기다리고 싶습니다.

한편, 나는 바쁜 대기처럼 보이는 셀렉터로부터 수많은 READ 이벤트를 계속 받는다.

그런 경우 올바른 접근 방법은 무엇입니까?

답변

0

그는 맞습니다. -1은 피어의 연결이 끊어 졌음을 의미합니다. 더 이상 데이터가 존재하지 않습니다. 당신이 언급 한 상황에서 당신은 -1을 얻지 못할 것입니다.

-1을 얻으면 채널을 닫아야합니다. 주의 사항 : 한 가지 잘못된 점은 채널을 닫으면 열쇠가 취소된다는 것입니다. 두 가지를 모두 할 필요가 없습니다.

관련 문제