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不再有可用的字節。