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

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

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

    sblig

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      10 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

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

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

    聲明:

    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
    // 在各個子類實現(xiàn)不同
    serverChannel.register(selector, SelectionKey.OP_ACCEPT);

    ?
    開啟服務(wù):

    while (true) {
    	try {
    			// 獲得IO準(zhǔn)備就緒的channel數(shù)量
    			int n = selector.select();
    			
    			// 沒有channel準(zhǔn)備就緒,繼續(xù)執(zhí)行
    			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);
    						}
    					
    						// 判斷是否有數(shù)據(jù)在此channel里需要讀取
    						if (key.isReadable()) {
    							processData(key);
    						}
    			}
    			
    			// 刪除 selectedkeys
    			it.remove();
    	
    		} catch (IOException e) {
    	// TODO Auto-generated catch block
    	e.printStackTrace();
    		}
    }

    ?




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


    ITeye推薦



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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费鲁丝片一级在线观看| 免费人成在线视频| 亚洲AV无码第一区二区三区| 免费不卡在线观看AV| 亚洲欧美自偷自拍另类视| 亚洲A∨午夜成人片精品网站| 亚洲AV成人潮喷综合网| 在线观看免费黄网站| 亚洲日本乱码一区二区在线二产线| 成人毛片免费观看视频大全| 免费精品国自产拍在线播放| 久久久无码精品亚洲日韩蜜桃 | 日本一区午夜艳熟免费| 亚洲乱码无限2021芒果| 亚洲精品国产日韩无码AV永久免费网| 一级毛片在线观看免费| 亚洲精品又粗又大又爽A片| 亚洲精品亚洲人成在线观看| 欧洲精品成人免费视频在线观看| 免费视频成人国产精品网站| 亚洲视频在线观看免费视频| www.亚洲一区| 在线v片免费观看视频| 一个人看的www在线免费视频 | 久久久久免费精品国产| 最新亚洲精品国偷自产在线| 亚洲精品无码专区在线在线播放| 免费看美女裸露无档网站| 在线播放免费人成毛片乱码| 国产亚洲精品AAAA片APP| 亚洲成a人片在线观看播放| 亚洲国产精品专区在线观看| 无码专区永久免费AV网站 | 一级毛片在线免费看| 免费视频精品一区二区| 亚洲精品无码高潮喷水A片软| 亚洲一区二区三区夜色| 精品国产日韩亚洲一区| 国产成人青青热久免费精品| 嘿嘿嘿视频免费网站在线观看| 免费看一区二区三区四区|