java NIO中ServerSocketChannel和SocketChannel连接的过程

在使用ServerSocketChannel和SocketChannel时,我们一般都会使用Selector来对我们的channel进行管理,这样就可以使一个线程处理多个channel。

因为Selector必须是非阻塞channel。所以ServerSocketChannel和SocketChannel都是可以非阻塞的,正好适用。

1、首先的功能和我们的ServerSocket类似,因为内部还是用到了ServerSocket

// 打开服务,并且绑定一个端口

socketChannel = ServerSocketChannel.open();

//必须把channel设置成非阻塞的,否则会出错

socketChannel.configureBlocking(false);

//只有绑定了端口,那么该ServerSocketChannel才会进行监听

socketChannel.bind(new InetSocketAddress(port));
System.out.println("listener on port:" + port);
// 打开一个Selector
selector = Selector.open();

// 把一个socketChannel注册到Selector上,

//ServerSocketChannel仅仅支持SelectionKey.OP_ACCEPT状态,

socketChannel.register(selector, SelectionKey.OP_ACCEPT);


2、实现监听

// 使用Selector中的select方法,这个方法会进行阻塞;

int n = selector.select();//这里会进行阻塞

//当接收到时,会是Accept状

你可能感兴趣的:(Java)