<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準備就緒的channel數(shù)量
    			int n = selector.select();
    			
    			// 沒有channel準備就緒,繼續(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 李凡 閱讀(169) 評論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 成人男女网18免费视频| 99爱免费观看视频在线| 好爽又高潮了毛片免费下载| 亚洲乱码卡三乱码新区| 18禁男女爽爽爽午夜网站免费| 亚洲AV无码久久| 性无码免费一区二区三区在线| 国产亚洲高清不卡在线观看| a毛片全部免费播放| 国产亚洲婷婷香蕉久久精品 | 免费萌白酱国产一区二区三区| 亚洲国产高清在线一区二区三区| 污视频网站在线观看免费| 免费在线观看中文字幕| 一级毛片a免费播放王色电影| 亚洲国产V高清在线观看| 一级有奶水毛片免费看| 久久精品国产精品亚洲艾| 99视频免费播放| 亚洲 欧洲 视频 伦小说| 国产精品免费小视频| 国产99久久久国产精免费| 久久精品国产69国产精品亚洲| 日本免费污片中国特一级| 亚洲精品资源在线| 女人被男人桶得好爽免费视频| 国产成人亚洲精品无码AV大片| 亚洲视频在线一区二区| 日本在线看片免费人成视频1000| 亚洲午夜一区二区电影院| 国产一级一片免费播放i| 中国人免费观看高清在线观看二区| 亚洲人成依人成综合网| 无码永久免费AV网站| 四虎影视久久久免费| 亚洲人成在线电影| 性做久久久久免费观看| 免费毛片在线看不用播放器| 亚洲av无码久久忘忧草| 亚洲精品tv久久久久| 四虎在线最新永久免费|