您的位置:首页 > 编程语言 > Java开发

Java NIO ServerSocketChannel

2016-03-12 22:49 501 查看
Opening a ServerSocketChannel
Closing a ServerSocketChannel
Listening for Incoming Connections
Non-blocking Mode

Jakob Jenkov

Last update: 2014-06-25

A Java NIO ServerSocketChannel is a channel that can listen for incoming TCP connections, just like a
ServerSocket
in
standard Java Networking. The
ServerSocketChannel
class is located in the
java.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 the
accept()
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

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: