Java NIO ServerSocketChannel은 표준 자바 네트워킹에서의 ServerSocket
과 같이 들어오는 TCP 연결을 수신가능한 채널이다. ServerSocketChannel 클래스는 java.nio.channels 패키지에 위치하고 있다.
다음 예제가 있다:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(new InetSocketAddress(9999)); while(true){ SocketChannel socketChannel = serverSocketChannel.accept(); //do something with socketChannel... }
Opening a ServerSocketChannel
ServerSocketChannel.open() 메소드를 호출하여 ServerSocketChannel을 연다. 다음 작업 방법이 있다:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
Closing a ServerSocketChannel
ServerSocketChannel.close() 메소드를 호출하여 ServerSocketChannel의 닫기가 완료된다. 다음 작업 방법이 있다:
serverSocketChannel.close();
Listening for Incoming Connections
ServerSocketChannel.accept() 메소드를 호출하여 들어오는 연결들의 수락이 완료된다. accept() 메소드가 반환되었을 때, 하나의 들어온 연결과 함께 SocketChannel을 반환한다. 그러므로 accept() 메소드는 들어오는 연결이 도착할 때 까지 블럭킹 된다.
일반적으로 단일 연결의 수신에는 관심이 없으므로, while-loop 내부에서 accept()를 호출한다. 다음 작업 방법이 있다:
while(true){ SocketChannel socketChannel = serverSocketChannel.accept(); //do something with socketChannel... }
while-loop 내부의 true보다 다른 정지-기준을 사용할 수도 있다.
Non-blocking Mode
ServerSocketChannel은 비블럭킹 모드로 설정 될 수 있다. 비블럭킹 모드에서 accept() 메소드는 즉시 반환되고, 만약 연결이 도착한 연결 수신이 없다면 null이 반환 될 수도 있다. 그러므로 SocketChannel이 null이 반환되는 경우를 확인해야 할 것이다. 다음 예제가 있다:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(new InetSocketAddress(9999)); serverSocketChannel.configureBlocking(false); while(true){ SocketChannel socketChannel = serverSocketChannel.accept(); if(socketChannel != null){ //do something with socketChannel... } }
'Programming > Java NIO' 카테고리의 다른 글
Pipe (0) | 2015.09.15 |
---|---|
DatagramChannel (0) | 2015.09.11 |
SocketChannel (0) | 2015.09.10 |
FileChannel (0) | 2015.09.09 |
Selector (0) | 2015.09.09 |