<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

    ?服務(wù)器端:

    ?

    ?

     // 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);
                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();
    			}
    		}

    ?

    ?

    ?

    ?客戶端:

    ?

    ?

      //打開socket通道
    		SocketChannel socketChannel = SocketChannel.open();
    		//設(shè)置非阻塞方式
    		socketChannel.configureBlocking(false);
    		//打開選擇器
    		Selector selector = Selector.open();
    		//注冊連接到服務(wù)器socket動作
    		socketChannel.register(selector, SelectionKey.OP_CONNECT);
    		//連接
    		socketChannel.connect( new InetSocketAddress("localhost",9988));
    		
    		Set<SelectionKey> selectkeySets;
    		SelectionKey selectionKey;
    		Iterator<SelectionKey> iterator;
    		
    		//與服務(wù)器通信通道
    		SocketChannel clientChannel ;
    
    	       while(true){
    			//選擇一組建,其相應(yīng)的通道已為I/O操作準備就緒
    			//此方法執(zhí)行處于阻塞模式的選擇操作
    			selector.select(TIME_OUT);
    			
    			//返回此選擇器的已選擇鍵集。
    			selectkeySets = selector.selectedKeys();
    			iterator = selectkeySets.iterator();
    			
    			
    			while(iterator.hasNext()){
    				selectionKey = iterator.next();
    				
    				if (selectionKey.isConnectable()) {
                                      clientChannel = (SocketChannel)selectionKey.channel();
    					// 判斷此通道上是否正在進行連接操作。  
                                      // 完成套接字通道的連接過程。  
    					if (clientChannel.isConnectionPending()) {//判斷此通道上是否正在進行連接操作
    						clientChannel.finishConnect();  //完成套接字通道的連接過程
                                       
                                      }
                                      clientChannel.register(selector, SelectionKey.OP_WRITE);
                                }else if (selectionKey.isReadable()) {
    					clientChannel = (SocketChannel)selectionKey.channel();
    					//將緩沖區(qū)清空
    					receiveBuffer.clear();
    					//讀取服務(wù)器發(fā)送來的數(shù)據(jù)庫到緩沖區(qū)
    					count = clientChannel.read(receiveBuffer);//count 讀取到的字節(jié)數(shù)
    					if (count > 0) {
    						clientChannel.register(selector, SelectionKey.OP_WRITE);
    					}
                                }else if (selectionKey.isWritable()) {
    					sendBuffer.clear();
    					clientChannel = (SocketChannel)selectionKey.channel();
    					clientChannel.write(sendBuffer);
    					System.out.println("客戶端向服務(wù)器發(fā)送數(shù)據(jù):"+sendText);
    					clientChannel.register(selector, SelectionKey.OP_READ);
                                }
                         }
                     }
    
    

    ?



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


    ITeye推薦



    posted on 2012-09-28 16:31 李凡 閱讀(300) 評論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费一级毛片在播放视频| 91精品免费不卡在线观看| 噜噜嘿在线视频免费观看| 亚洲伊人久久精品| 亚洲无砖砖区免费| 亚洲第一成年人网站| 四虎最新永久免费视频| 亚洲人成伊人成综合网久久| 最近高清中文字幕无吗免费看| 亚洲视频精品在线观看| 无码av免费毛片一区二区| 国产精品亚洲综合久久| 日韩免费电影在线观看| 四虎精品成人免费视频| 国产91精品一区二区麻豆亚洲| 国产成人自产拍免费视频| 国产V亚洲V天堂A无码| 在线观看永久免费| 亚洲无mate20pro麻豆| 国产在线播放免费| 国产免费久久精品99久久| 亚洲av无码av制服另类专区| 亚洲大片免费观看| 亚洲中文字幕无码久久2020| 免费很黄很色裸乳在线观看| 中文字幕在线免费播放| 亚洲福利视频网站| 免费观看的a级毛片的网站| 一级毛片免费不卡直观看| 亚洲人成电影在线天堂| 成年人免费网站在线观看| v片免费在线观看| 亚洲高清日韩精品第一区| 国产精品自在自线免费观看| 成人免费无码H在线观看不卡| 久久久久亚洲Av无码专| 成人国产mv免费视频| 99精品免费视品| 国产成人亚洲合集青青草原精品| 亚洲色偷拍区另类无码专区| 中文免费观看视频网站|