Java NIO ServerSocketChannel

来源:互联网 发布:人工智能威胁论 提出人 编辑:程序博客网 时间:2024/06/05 14:36


Java Nio 

1Java NIO Tutorial2Java NIO Overview3Java NIO Channel4Java NIO Buffer5Java NIO Scatter / Gather6Java NIO Channel to Channel Transfers7Java NIO Selector8Java NIO FileChannel9Java NIO SocketChannel10Java NIO ServerSocketChannel11Java NIO DatagramChannel12Java NIO Pipe13Java NIO vs. IO

Java NIO ServerSocketChannel

 
By Jakob Jenkov
 Connect with me: 
Rate article:
Share article:
Tweet

A Java NIO ServerSocketChannel is a channel that can listen for incoming TCP connections, just like aServerSocket in standard Java Networking. The ServerSocketChannel class is located in thejava.nio.channels package.

Here is an example:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();serverSocketChannel.socket().bind(new InetSocketAddress(9999));while(true){    SocketChannel socketChannel =            serverSocketChannel.accept();    //do something with socketChannel...}

Opening a ServerSocketChannel

You open a ServerSocketChannel by calling the ServerSocketChannel.open() method. Here is how that looks:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

Closing a ServerSocketChannel

Closing a ServerSocketChannel is done by calling the ServerSocketChannel.close() method. Here is how that looks:

serverSocketChannel.close();

Listening for Incoming Connections

Listening for incoming connections is done by calling the ServerSocketChannel.accept() method. When theaccept() method returns, it returns a SocketChannel with an incoming connection. Thus, the accept() method blocks until an incoming connection arrives.

Since you are typically not interested in listening just for a single connection, you call the accept() inside a while-loop. Here is how that looks:

while(true){    SocketChannel socketChannel =            serverSocketChannel.accept();    //do something with socketChannel...}

Of course you would use some other stop-criteria than true inside the while-loop.

Non-blocking Mode

ServerSocketChannel can be set into non-blocking mode. In non-blocking mode the accept() method returns immediately, and may thus return null, if no incoming connection had arrived. Therefore you will have to check if the returned SocketChannel is null. Here is an example:

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...        }}









0 1
原创粉丝点击