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
Posted by 레미파
,