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不再有可用的字节。
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。