码迷,mamicode.com
首页 > 编程语言 > 详细

Java新IO】_Selector

时间:2016-12-16 22:11:52      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:exception   figure   add   gis   设置   get   ++   class   iterator   

DateServer.java


import java.net.InetSocketAddress ;
import java.net.ServerSocket ;
import java.util.Set ;
import java.util.Iterator ;
import java.util.Date ;
import java.nio.channels.ServerSocketChannel ;
import java.nio.ByteBuffer ;
import java.nio.channels.SocketChannel ;
import java.nio.channels.Selector  ;
import java.nio.channels.SelectionKey  ;
public class DateServer{
    public static void main(String args[]) throws Exception {
        int ports[] = {8000,8001,8002,8003,8005,8006} ; // 表示五个监听端口
        Selector selector = Selector.open() ;    // 通过open()方法找到Selector
        for(int i=0;i<ports.length;i++){
            ServerSocketChannel initSer = null ;
            initSer = ServerSocketChannel.open() ;    // 打开服务器的通道
            initSer.configureBlocking(false) ;    // 服务器配置为非阻塞
            ServerSocket initSock = initSer.socket() ;
            InetSocketAddress address = null ;
            address = new InetSocketAddress(ports[i]) ;    // 实例化绑定地址
            initSock.bind(address) ;    // 进行服务的绑定
            initSer.register(selector,SelectionKey.OP_ACCEPT) ;    // 等待连接
            System.out.println("服务器运行,在" + ports[i] + "端口监听。") ;
        }
        // 要接收全部生成的key,并通过连接进行判断是否获取客户端的输出
        int keysAdd = 0 ;
        while((keysAdd=selector.select())>0){    // 选择一组键,并且相应的通道已经准备就绪
            Set<SelectionKey> selectedKeys = selector.selectedKeys() ;// 取出全部生成的key
            Iterator<SelectionKey> iter = selectedKeys.iterator() ;
            while(iter.hasNext()){
                SelectionKey key = iter.next() ;    // 取出每一个key
                if(key.isAcceptable()){
                    ServerSocketChannel server = (ServerSocketChannel)key.channel() ;
                    SocketChannel client = server.accept() ;    // 接收新连接
                    client.configureBlocking(false) ;// 配置为非阻塞
                    ByteBuffer outBuf = ByteBuffer.allocateDirect(1024) ;    //
                    outBuf.put(("当前的时间为:" + new Date()).getBytes()) ;    // 向缓冲区中设置内容
                    outBuf.flip() ;
                    client.write(outBuf) ;    // 输出内容
                    client.close() ;    // 关闭
                }
            }
            selectedKeys.clear() ;    // 清楚全部的key
        }
        
    }
}

Java新IO】_Selector

标签:exception   figure   add   gis   设置   get   ++   class   iterator   

原文地址:http://www.cnblogs.com/wangminlomt5/p/6188263.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!