
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/
回复评论