Java NIO ServerSocketChannel


Java NIO ServerSocketChannel還可以用來將通道與TCP(傳輸控制協定)網路通訊端連線起來。它相當於網路程式設計中使用的Java網路通訊端。ServerSocketChannel類位於java.nio.channels包中。

下面我們來看看ServerSocketChannel的例子:

ServerSocketChannel ssc = ServerSocketChannel.open();  
ssc.socket().bind(new InetSocketAddress(8085));  
while(true){  
    SocketChannel socketChannel = ssc.accept();  
}

關閉ServerSocketChannel

通過呼叫ServerSocketChannel.close()方法執行所有操作後,可以關閉ServerSocketChannel

下面是關閉ServerSocketChannel的語法是:

ServerSocketChannel.close();

開啟ServerSocketChannel

要開啟ServerSocketChannel,可通過呼叫ServerSocketChannel.open()方法開啟一個ServerSocketChannel

用於開啟ServerSocketChannel的語法是:

ServerSocketChannel sc = ServerSocketChannel.open();  
sc.connect(new InetSocketAddress("localhost", 9099));

監聽連線

監聽客戶商連線,可通過呼叫ServerSocketChannel.accept()方法完成。accept()方法用於返回帶有傳入連線的SocketChannel

下面是監聽連線的例子:

while(true){  
    SocketChannel sc = serverSocketChannel.accept();  
}

while迴圈中呼叫accept()方法,因為這裡要監聽所有傳入的連線。

從ServerSocketChannel讀取資料

要從ServerSocketChannel讀取資料,可呼叫read()方法之一。

下面是從ServerSocketChannel讀取資料的例子:

ByteBuffer bb = ByteBuffer.allocate(84);  
int bytesRead = ServerSocketChannel.read(bb);

首先分配緩衝區。從ServerSocketChannel讀取的資料儲存在緩衝區中。

其次,呼叫ServerSocketChannel.read()方法,並將資料從ServerSocketChannel讀入緩衝區。read()方法的整數值返回寫入緩衝區的位元組數。

將資料寫入ServerSocketChannel

要將資料寫入ServerSocketChannel,可使用ServerSocketChannel.write()方法,它將緩衝區(buffer)作為引數。

下面是將資料寫入ServerSocketChannel的例子:

String newData = "The new String is writing in a file ..." + System.currentTimeMillis();  
ByteBuffer bb= ByteBuffer.allocate(48);  
bb.clear();  
bb.put(newData.getBytes());  
bb.flip();  
while(bb.hasRemaining()) {  
    ServerSocketChannel.write(bb);  
}

ServerSocketChannel.write()方法在while迴圈中使用,因為write()方法寫入ServerSocketChannel的位元組數目是未知的,因此需要重複使用write()方法,直到Buffer不再有可用的位元組。