<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    sblig

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      10 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

    Java.nio中的主要類
    ServerSocketChannel:ServerSocket的替代類.
    SocketChannel:Socket的替代類
    Selector:為ServerSocketChannel監控接受就緒事件,為SocketChannel監控連接就緒,讀就緒和寫就緒事件
    SelectionKey:代表ServerSocketChannel及SocketChannel向Selector注冊事件句柄
    向SocketChannel和ServerSocketChannel注冊事件:
    SelectionKey key=serverSocketChannel.register(selector,op)
    Op的可選值
    對于ServerSocketChannel只有一個事件:
    (1)SelectionKye.OP_ACCEPT:接受連接就緒事件,表示至少有了一個客戶連接,服務器可以接受這個連接
    SocketChannel可能發生3種事件
    (1)SelectionKey.OP_CONNECT:連接就為事件,表示客戶與服務器的連接已經成功
    (2)SelectionKey.OP_WRITE/OP_READ:寫的就緒事件,表示已經可以向輸出流寫數據了SocketChannel提供了接受和發送的方法
    可以使用:read(ByteBuffer)write(ByteBuffer)寫入寫出

    ?ServerSocketChannel類
    方法:(PS繼承過SelectableChannel類的方法)
    ??? (1)open()靜態方法獲取ServerSocketChannel對象.
    ???? (2)accept同ServerSocket,不過獲取的是SocketChannel,根據是否阻塞返回null還是阻塞,值得注意的是accept返回的SocketChannel是阻塞模式的使用configureBlocking更改模式
    ???? (3)socket() 返回關聯的ServerSocket
    SocketChannel類
    此類是Socket類的替代類?
    方法:(PS繼承過SelectableChannel類的方法)
    (1)open() open(SocketAddress)靜態方法用來創建SocketChannel對象,第二個重寫還會建立于遠程服務器的連接.
    (2)socket()返回關聯的Socket對象
    (3)isConnected()是否建立連接
    (4)isConnectionPending判斷是否正在進行遠程連接
    (5)connect() 建立遠程連接() 根據是否阻塞而不同
    (6)finishConnect() 視圖完成遠程連接?
    (7)read()讀取數據(這個應該是接數據)
    (8)write()寫數據(這個是發送數據)

    聲明:

    public static int PORT = 8888;
    ServerSocketChannel serverChannel;
    ServerSocket serverSocket;
    Selector  selector;

    ?
    初始化:

    // 1. 分配一個 ServerSocketChannel 文件描述符
    serverChannel = ServerSocketChannel.open();
    
    // 2. 從 ServerSocketChannel里獲取一個對于的 socket
    serverSocket = serverChannel.socket();
    
    // 3. 生成一個 Selector
    selector = Selector.open();
    
    // 4. 把 socket 綁定到端口上
    serverSocket.bind(new InetSocketAddress(iport));
    
    // 5. serverChannel 未非bolck
    serverChannel.configureBlocking(false);
    
    // 6. 通過Selector注冊ServerSocketChannel: 只能注冊 accept
    // 而SocketChannel可以注冊CONNENCT,READ,WRITE ; register -> validOps
    // 在各個子類實現不同
    serverChannel.register(selector, SelectionKey.OP_ACCEPT);

    ?
    開啟服務:

    while (true) {
    	try {
    			// 獲得IO準備就緒的channel數量
    			int n = selector.select();
    			
    			// 沒有channel準備就緒,繼續執行
    			if (n == 0) {
    				continue;
    			}
    			
    			// 用一個iterator返回Selector的selectedkeys
    			Iterator it = selector.selectedKeys().iterator();
    			
    			// 處理每一個SelectionKey
    			while (it.hasNext()) {
    						SelectionKey key = (SelectionKey) it.next();
    					
    						// 判斷是否有新的連接到達
    						if (key.isAcceptable()) {
    					
    							// 返回SelectionKey的ServerSocketChannel
    							ServerSocketChannel server = (ServerSocketChannel) key
    							.channel();
    							System.out.println("有連接");
    							SocketChannel channel = server.accept();
    							
    							registerChannel(selector, channel, SelectionKey.OP_READ);
    							
    							doWork(channel);
    						}
    					
    						// 判斷是否有數據在此channel里需要讀取
    						if (key.isReadable()) {
    							processData(key);
    						}
    			}
    			
    			// 刪除 selectedkeys
    			it.remove();
    	
    		} catch (IOException e) {
    	// TODO Auto-generated catch block
    	e.printStackTrace();
    		}
    }

    ?




    已有 0 人發表留言,猛擊->>這里<<-參與討論


    ITeye推薦



    posted on 2012-09-21 16:08 李凡 閱讀(171) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产中文字幕免费观看| 青春禁区视频在线观看直播免费| 免费人成年轻人电影| 久久无码av亚洲精品色午夜| 亚洲av无码专区在线| 免费黄色福利视频| 亚洲日韩欧洲乱码AV夜夜摸| 麻豆狠色伊人亚洲综合网站 | 亚洲日韩中文在线精品第一| 中文字幕亚洲精品| 99在线视频免费| 国产亚洲午夜高清国产拍精品| 十八禁的黄污污免费网站| 亚洲乱码中文字幕手机在线| 国产免费A∨在线播放| 女人与禽交视频免费看| 亚洲人成人网站18禁| 国产gav成人免费播放视频| 精品免费AV一区二区三区| 精品国产一区二区三区免费| 日本亚洲视频在线| 曰批视频免费40分钟试看天天| 国产成人精品日本亚洲专区| 一级女人18片毛片免费视频 | 中文亚洲AV片在线观看不卡| 亚洲AV综合永久无码精品天堂| 免费大片黄手机在线观看| 色播在线永久免费视频网站| 亚洲综合久久1区2区3区| 日韩成人在线免费视频| 国产免费A∨在线播放| 亚洲国产高清视频在线观看| 一级毛片在线免费看| 久久亚洲一区二区| 亚洲第一成年免费网站| 亚洲已满18点击进入在线观看| 亚洲国产精品成人| 亚洲三级在线免费观看| 黄人成a动漫片免费网站| 亚洲午夜久久影院| 免费人妻无码不卡中文字幕18禁|