摘要:中的是一個可以監(jiān)聽新進來的連接的通道就像標準中的一樣。當(dāng)然也可以在循環(huán)中使用除了以外的其它退出準則。非阻塞模式可以設(shè)置成非阻塞模式。在非阻塞模式下,方法會立刻返回,如果還沒有新進來的連接返回的將是。因此,需要檢查返回的是否是如
Java NIO中的 ServerSocketChannel 是一個可以監(jiān)聽新進來的TCP連接的通道, 就像標準IO中的ServerSocket一樣。ServerSocketChannel類在 java.nio.channels包中。
這里有個例子:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(new InetSocketAddress(9999)); while(true){ SocketChannel socketChannel = serverSocketChannel.accept(); //do something with socketChannel... }
打開 ServerSocketChannel
通過調(diào)用 ServerSocketChannel.open() 方法來打開ServerSocketChannel.如:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
關(guān)閉 ServerSocketChannel
通過調(diào)用ServerSocketChannel.close() 方法來關(guān)閉ServerSocketChannel. 如:
serverSocketChannel.close();
監(jiān)聽新進來的連接
通常不會僅僅只監(jiān)聽一個連接,在while循環(huán)中調(diào)用 accept()方法. 如下面的例子:
while(true){ SocketChannel socketChannel = serverSocketChannel.accept(); //do something with socketChannel... }
通過 ServerSocketChannel.accept() 方法監(jiān)聽新進來的連接。
當(dāng) accept()方法返回的時候,它返回一個包含新進來的連接的 SocketChannel。因此, accept()方法會一直阻塞到有新連接到達。
當(dāng)然,也可以在while循環(huán)中使用除了true以外的其它退出準則。
非阻塞模式
ServerSocketChannel可以設(shè)置成非阻塞模式。在非阻塞模式下,accept() 方法會立刻返回,如果還沒有新進來的連接,返回的將是null。 因此,需要檢查返回的SocketChannel是否是null.如:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(new InetSocketAddress(9999)); serverSocketChannel.configureBlocking(false); while(true){ SocketChannel socketChannel =serverSocketChannel.accept(); if(socketChannel != null){ //do something with socketChannel... } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71728.html
摘要:通常來說所有的的操作都是從開始的一個類似于一個和對比我們可以在同一個中執(zhí)行讀和寫操作然而同一個僅僅支持讀或?qū)懣梢援惒降刈x寫而是阻塞的同步讀寫總是從中讀取數(shù)據(jù)或?qū)?shù)據(jù)寫入到中類型有文件操作操作操作操作使用在服務(wù)器端這些通道涵蓋了和網(wǎng)絡(luò)以及文件 Java NIO Channel 通常來說, 所有的 NIO 的 I/O 操作都是從 Channel 開始的. 一個 channel 類似于一個 ...
摘要:什么是零拷貝我們首先來認識一下傳統(tǒng)的操作。因為在這套體系里,不僅僅提供了非阻塞的編程模型,而且提供了類似零拷貝,內(nèi)存映射這樣的新技術(shù)對于操作系統(tǒng)來說早就有了。 什么是零拷貝?我們首先來認識一下傳統(tǒng)的I/O操作。假如說用戶進程現(xiàn)在要把一個文件復(fù)制到另一個地方。那么用戶程序必須先把這個文件讀入內(nèi)存,然后再把內(nèi)存里的數(shù)據(jù)寫入另一個文件。不過文件讀入內(nèi)存也不是直接讀入用戶進程的內(nèi)存,而是先讀入...
摘要:是什么就不在此文展開,這篇主要來介紹下我們要怎樣通過來構(gòu)建一個服務(wù)客戶端程序的。的通信完全依賴與,數(shù)據(jù)的寫入和讀取都是通過從中寫入讀取。和上的調(diào)用一樣的功能,監(jiān)聽已經(jīng)注冊在上面的文件描述符,監(jiān)聽上的事件。 NIO是什么就不在此文展開,這篇主要來介紹下我們要怎樣通過java NIO來構(gòu)建一個服務(wù)客戶端程序的。 0x01 涉及知識點 NIO建立一個服務(wù)端和客戶端程序主要涉及的知識點有: ...
摘要:組件主要有三大核心部分通道,緩沖區(qū)選擇器。選擇區(qū)用于監(jiān)聽多個通道的事件比如連接打開,數(shù)據(jù)到達。即用選擇器,借助單一線程,就可對數(shù)量龐大的活動通道實施監(jiān)控和維護。 Java NIO 簡介JAVA NIO有兩種解釋:一種叫非阻塞IO(Non-blocking I/O),另一種也叫新的IO(New I/O),其實是同一個概念。它是一種同步非阻塞的I/O模型,也是I/O多路復(fù)用的基礎(chǔ),已經(jīng)被越...
摘要:前言本篇主要講解中的機制和網(wǎng)絡(luò)通訊中處理高并發(fā)的分為兩塊第一塊講解多線程下的機制第二塊講解如何在機制下優(yōu)化資源的浪費服務(wù)器單線程下的機制就不用我介紹了,不懂得可以去查閱下資料那么多線程下,如果進行套接字的使用呢我們使用最簡單的服務(wù)器來幫助大 前言 本篇主要講解Java中的IO機制和網(wǎng)絡(luò)通訊中處理高并發(fā)的NIO 分為兩塊:第一塊講解多線程下的IO機制第二塊講解如何在IO機制下優(yōu)化CPU資...
閱讀 3573·2021-09-24 09:48
閱讀 1095·2021-09-10 10:51
閱讀 3276·2019-08-30 13:03
閱讀 3324·2019-08-30 12:51
閱讀 1393·2019-08-30 11:22
閱讀 1061·2019-08-29 18:38
閱讀 2040·2019-08-29 16:41
閱讀 3201·2019-08-29 15:32