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

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

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

    posts - 12, comments - 0, trackbacks - 0, articles - 7
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    IO三種方式:BIO,NIO,AIO (異步讀寫asynchronous IO)

    jdk1.6及之前都只實(shí)現(xiàn)BIO 和 NIO
    jdk1.7開始支持AIO,即NIO 2.0


    在BIO阻塞模式下server端:
    1 new ServerSocket(int port) 監(jiān)聽端口
    2 serverSocket.accept() 阻塞式等待客戶端的連接,有連接才返回Socket對(duì)象
    3 socket.getINputStream() 獲取客戶端發(fā)過來的信息流
    4 socket.getOutputStream() 獲取輸出流對(duì)象,從而寫入數(shù)據(jù)返回客戶端

    client端:
    1 newSocket(String host,int port) 建立與服務(wù)器端的連接,如果服務(wù)器沒啟動(dòng),報(bào)Connection refused異常
    2 socket.getInputStream() 讀取服務(wù)器端返回的流
    3 socket.getOutputStream() 獲取輸出流,寫入數(shù)據(jù)發(fā)送到服務(wù)器端


    在NIO模式下Server端:
    1 ServerSocketChannel.open() 獲取serverScoketChannel實(shí)例
    2 serverScoketChannel.configueBlocking(false) 設(shè)置channel為非阻塞模式
    3 serverSocketChannel.socket() 獲取serverSocket對(duì)象
    4 serverSocket.bind(port) 監(jiān)聽端口
    5 Selector.open() 打開Selector,獲取selector實(shí)例
    6 serverSocketChannel.register(Selector,int) 向selector注冊(cè)channel和感興趣的事件
    7 while(true) 循環(huán)以保證正常情況下服務(wù)器端一直處于運(yùn)行狀態(tài)
    8 selector.select() 獲取selector實(shí)例中需要處理的SelectionKey的數(shù)量
    9 for(SelectionKey key:selector.selectedKeys()) 遍歷selector.selectedKeys,以對(duì)每個(gè)SelectionKey的事件進(jìn)行處理
    10 key.isAcceptable() 判斷SelectionKey的類型是否為客戶端建立連接的類型
    11 key.channel() 當(dāng)SelectionKey的類型是acceptabel時(shí),獲取綁定的ServerSocketChannel對(duì)象
    12 serverSocketChannel.accept() 接受客戶端建立連接的請(qǐng)求,并返回SocketChannel對(duì)象
    13 socketChannel.regiseter(Selector,int) 向Selector注冊(cè)感興趣的事件類型,如read,write
    14 key.isReadable() 判斷SelectionKey是否為readable,如是則意味著有消息流在等待處理
    15 socketChannel.read(ByteBuffer) 從SelectionKey中綁定的SocketChannel對(duì)象讀取消息流
    16 socketChannel.write(ByteBuffer) 從SelectionKey中綁定的SocketChannel對(duì)象輸出消息流

    client端:
    1 SocketChannel.open() 打開SocketChannel
    2 SocketChannel.configureBlocking(false) 將SocketChannel配置為非阻塞模式
    3 SocketChannel.connect(host,port) 連接到指定的目標(biāo)地址
    4 Selector.open() 打開Selector
    5 SocketChannel.register(Selector,int) 向Selector注冊(cè)感興趣的事件,connected,read,write
    6 while(true) 循環(huán)執(zhí)行保證客戶端一直處于運(yùn)行狀態(tài)
    7 Selector.select() 從Selector中獲取是否有可讀的key信息
    8 for(SelectionKey key:selector.selectedKeys()) 遍歷selector中所有selectedKeys
    9 SelectionKey.isConnectable() 判斷是否為連接建立的類型
    10 SelectionKey.channel() 獲取綁定的SocketChannel
    11 SocketChannel.finishConnect() 完成連接的建立(TCP/IP的三次握手)
    12 SelectionKey.isReadable() 判斷是否為可讀類型
    13 SelectionKey.channel() 獲取綁定的SocketChannel
    14 SocketChannel.read(ByteBuffer) 從SocketChannel中讀取數(shù)到ByteBuffer中
    15 SocketChannel.write(ByteBuffer) 向SocketChannel中寫入ByteBuffer對(duì)象數(shù)據(jù)
    主站蜘蛛池模板: 一本岛高清v不卡免费一三区| 好紧我太爽了视频免费国产| 毛片免费观看网站| 亚洲国产日韩在线一区| 中国在线观看免费国语版| 亚洲一区二区三区91| 国产成人yy免费视频| 亚洲精品一区二区三区四区乱码 | 怡红院亚洲怡红院首页| 一级中文字幕免费乱码专区| 亚洲精品A在线观看| 精品熟女少妇aⅴ免费久久| 国产亚洲精品精华液| 免费91麻豆精品国产自产在线观看| 亚洲AV人无码激艳猛片| 国产成人精品久久免费动漫| 亚洲中文无码a∨在线观看| 免费做爰猛烈吃奶摸视频在线观看 | 亚洲av无一区二区三区| 亚洲av麻豆aⅴ无码电影| 久久国产一片免费观看| 亚洲国产成人久久精品动漫| 成年人免费的视频| 另类图片亚洲校园小说区| 亚洲熟女少妇一区二区| 免费成人激情视频| 国产天堂亚洲国产碰碰| 国产亚洲A∨片在线观看| 国产成人精品免费视频网页大全| 亚洲无码一区二区三区| 相泽亚洲一区中文字幕| 久久免费看黄a级毛片| 美女羞羞免费视频网站| 亚洲国产高清人在线| 免费黄色一级毛片| 特级做A爰片毛片免费看无码| 亚洲成年人免费网站| 亚洲中文字幕伊人久久无码| 久久午夜夜伦鲁鲁片免费无码影视| AV激情亚洲男人的天堂国语| 亚洲va在线va天堂va四虎|