package znio; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Date; import java.util.Iterator; import java.util.Set; public class DataServer { public static void main(String[] args) throws Exception { int[] ports = {8001,8002,8003,8004,8005}; Selector selector = Selector.open(); for(int i=0; i<ports.length; i++){ ServerSocketChannel ssc = ServerSocketChannel.open(); ssc.configureBlocking(false); ServerSocket ss = ssc.socket(); InetSocketAddress isa = new InetSocketAddress(ports[i]); ss.bind(isa); ssc.register(selector, SelectionKey.OP_ACCEPT); System.out.println("服务器运行,在端口" + ports[i] + "上监听!"); } int keysAdd = 0; while((keysAdd = selector.select()) > 0){ Set<SelectionKey> selectedKeys = selector.selectedKeys(); Iterator<SelectionKey> iter = selectedKeys.iterator(); while(iter.hasNext()){ SelectionKey selectedKey = iter.next(); if(selectedKey.isAcceptable()){ ServerSocketChannel ssc = (ServerSocketChannel)selectedKey.channel(); SocketChannel sc = ssc.accept(); sc.configureBlocking(false); ByteBuffer bb = ByteBuffer.allocate(1024); bb.put(("server response time: " + new Date()).getBytes()); bb.flip(); sc.write(bb); sc.close(); } } selectedKeys.clear(); } } }
java nio Selector(多路复用,异步阻塞)例子
猜你喜欢
转载自kinghoo.iteye.com/blog/2300701
今日推荐
周排行