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