선택자가 작동하지 않는 이유를 찾으려고합니다. 코드는 다음과 같습니다.java.nio.channels.Selector.select()는 0을 반환합니다.
//SocketChannel ch
//java.nio.channels.Selector impl
//Object session
SelectionKey sk = ch.register(impl, 0x01, session);
int i = impl.select();
System.out.println(i);
인쇄 된 값은 0입니다. 이것은 프로그램에서 SocketChannel.register의 유일한 호출이므로, 이해하는 한 :
a) 등록 중에 하나의 새 SelectionKey가 만들어 져야합니다.
b) 따라서 선택 중에 하나의 키의 "ready-operation set"을 업데이트해야합니다. 즉,이 메서드는 1을 반환해야합니다.
예상대로 작동하지 않는 이유는 무엇입니까? "준비 작업 세트가 업데이트 된 사람"이란 정확히 무엇입니까?
왜? '채널'이란 무엇입니까? 어떤 상태입니까? (b)가 (a)에서 따 온다고 생각하게하는 이유는 무엇입니까? – EJP
좋습니다. 그러면 "준비 작업 집합이 업데이트되었습니다." –
System.out.println (ch.isBlocking()); System.out.println (ch.isConnected()); System.out.println (ch.isConnectionPending()); System.out.println (ch.isOpen()); System.out.println (ch.isRegistered()); System.out.println (ch.getRemoteAddress()); 준다 거짓 사실 거짓 사실 진정한 /192.168.1.249:14712 –