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