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
不再有可用的位元組。