를 반환 판독 코드를 읽어자바 NIO SocketChannel에 항상 클라이언트 측에서 동일한 데이터
byte[] bytes = new byte[50]; //TODO should reuse buffer, for test only
ByteBuffer dst = ByteBuffer.wrap(bytes);
int ret = 0;
int readBytes = 0;
boolean fail = false;
try {
while ((ret = socketChannel.read(dst)) > 0) {
readBytes += ret;
System.out.println("read " + ret + " bytes from socket " + dst);
if (!dst.hasRemaining()) {
break;
}
}
int pos = dst.position();
byte[] data = new byte[pos];
dst.flip();
dst.get(data);
System.out.println("read data: " + StringUtil.toHexString(data));
} catch (Exception e) {
fail = true;
handler.onException(e);
}
문제는 socketChannel.read()와 항상 I가 리턴 버퍼를 체크 긍정적 반환 데이터가 중복 N 배이며 그것은 저수준 소켓 버퍼의 위치가 앞으로 움직이지 않는 것을 좋아한다. 어떤 생각?
빠른 재생 주셔서 감사합니다. 이 소켓 채널은 Netty 서버에 연결합니다. 서버에 한 요청을 보내면 서버는 48 바이트 만 반환하고 selector.select()가 반환되고 selectionKey는 읽을 수있는 경우에만 코드가 실행됩니다. 그래서 나는 완전히 혼란 스러웠다. –
BTW, 제목에서 언급했듯이, socketChannel에서 읽은 것은 48 바이트의 서버 반환입니다. 문제는 항상 socketChannel에서 동일한 데이터를 읽을 수 있다는 것입니다. 그리고 데이터가 정확하므로 디코드 할 수 있으므로 결코 멈추지 않습니다 :-( –
--- 코드에 버그가 없습니다. 어떤 데이터를 Netty에서 읽었는지 명확히 할 수 있습니까? – jayunit100