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

Java NIO ServerSocketChannel

2014-11-20 08:54 525 查看
Java Nio 

1Java NIO Tutorial
2Java NIO Overview
3Java NIO Channel
4Java NIO Buffer
5Java NIO Scatter / Gather
6Java NIO Channel to Channel Transfers
7Java NIO Selector
8Java NIO FileChannel
9Java NIO SocketChannel
10Java NIO ServerSocketChannel
11Java NIO DatagramChannel
12Java NIO Pipe
13Java NIO vs. IO

Java NIO ServerSocketChannel


 
By Jakob Jenkov Connect with me: 
Rate article:Share article:Tweet
Table of ContentsOpening a ServerSocketChannel
Closing a ServerSocketChannel
Listening for Incoming Connections
Non-blocking Mode
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

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

}



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