selector demo
来源:互联网 发布:js返回顶部底部代码 编辑:程序博客网 时间:2024/05/17 01:10
import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.nio.charset.Charset;import java.nio.charset.CharsetDecoder;import java.nio.charset.CharsetEncoder;import java.util.Iterator;import org.apache.log4j.Logger;import biz.ext.Dispatcher;import conf.Conf;public class NIOTask implements Runnable {Logger logger = Logger.getLogger(this.getClass());final int max_buf = 1024;ServerSocketChannel server = null;Selector selector = null;CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder(); Charset charset = Charset.forName("UTF-8"); CharsetDecoder decoder = charset.newDecoder();@Overridepublic void run() {try {server = ServerSocketChannel.open();selector = Selector.open();server.socket().bind(new InetSocketAddress(Conf.SOCKPORT));server.configureBlocking(false);server.register(selector, SelectionKey.OP_ACCEPT);while(selector.select()>0){Iterator<SelectionKey> selectKeyItr = selector.selectedKeys().iterator();while(selectKeyItr.hasNext()){SelectionKey curKey = selectKeyItr.next();selectKeyItr.remove();if(curKey.isAcceptable()){ServerSocketChannel ssc = (ServerSocketChannel) curKey.channel();SocketChannel sc = ssc.accept();sc.configureBlocking(false);sc.register(selector, SelectionKey.OP_READ);System.out.println("Access:"+sc.socket().getInetAddress().getHostAddress());}if(curKey.isReadable()){SocketChannel sc = (SocketChannel) curKey.channel();ByteBuffer buffer = ByteBuffer.allocate(max_buf);while(sc.read(buffer)>0){buffer.clear();// buffer.flip();String line = decoder.decode(buffer).toString();logger.info("Access from " + sc.socket().getInetAddress().getHostAddress()+ ":" + line);String result = Dispatcher.parse(line);buffer = encoder.encode(CharBuffer.wrap(result + Conf.LINE));sc.write(buffer);// sc.close();}}}}} catch (Exception e) {// TODO: handle exception}}}
0 0
- selector demo
- selector
- selector
- @selector
- selector
- @selector
- Selector
- @selector
- @selector
- Selector
- selector
- @selector
- selector
- selector
- Selector
- @selector
- SELECTOR
- selector
- 新互联网IT - 云和OaaS
- MySQL 中二进制日志 (binlog) 3 种不同的格式(Mixed,Statement,Row)
- GCD IOS
- arm-linux-gcc 和 arm-elf-gcc 的区别
- php
- selector demo
- mac svnx第一次初始化
- eclipse / ADT(Android Develop Tool) 一些方便的初始设置
- 小记
- MySQL 中文插入数据乱码(问号????)ERROR 1366 (HY000)
- 异步套接字基础:select函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- IOS中block的循环保留问题解决
- php
- linux下安装redis扩展(phpredis,php5.4.14)