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