public void selector() throws IOException { |
ByteBuffer buffer = ByteBuffer.allocate( 1024 ); |
Selector selector = Selector.open(); |
ServerSocketChannel ssc = ServerSocketChannel.open(); |
ssc.configureBlocking( false ); //设置为非阻塞方式 |
ssc.socket().bind( new InetSocketAddress( 8080 )); |
ssc.register(selector, SelectionKey.OP_ACCEPT); //注册监听的事件 |
while ( true ) { |
Set selectedKeys = selector.selectedKeys(); //取得所有key集合 |
Iterator it = selectedKeys.iterator(); |
while (it.hasNext()) { |
SelectionKey key = (SelectionKey) it.next(); |
if ((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) { |
ServerSocketChannel ssChannel = (ServerSocketChannel) key.channel(); |
SocketChannel sc = ssChannel.accept(); //接受到服务端的请求 |
sc.configureBlocking( false ); |
sc.register(selector, SelectionKey.OP_READ); |
it.remove(); |
} else if |
((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) { |
SocketChannel sc = (SocketChannel) key.channel(); |
while ( true ) { |
buffer.clear(); |
int n = sc.read(buffer); //读取数据 |
if (n <= 0 ) { |
break ; |
} |
buffer.flip(); |
} |
it.remove(); |
} |
} |
} |
} //源代码片段来自云代码http://yuncode.net |
|
by: 发表于:2015-07-10 12:02:21 顶(0) | 踩(0) 回复
不明觉厉!石荣峰 http://shirongfeng.com/
回复评论