java socketchannel api,10. Java NIO ServerSocketChannel 服务端套接字通道

在Java NIO中,ServerSocketChannel是用于监听TCP链接请求的通道,正如Java网络编程中的ServerSocket一样。

ServerSocketChannel实现类位于java.nio.channels包下面。 下面是一个示例程序:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

serverSocketChannel.socket().bin(new InetSocketAddress(9999));

while(true) {

SocketChannel socketChannel = serverSocketChannel.accept();

//do something with socketChannel...

}

打开ServerSocketChannel

打开一个ServerSocketChannel我们需要调用他的open()方法,例如:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

关闭ServerSocketChannel

关闭一个ServerSocketChannel我们需要调用他的close()方法,例如:

serverSocketChannel.close();

监听链接

通过调用accept()方法,我们就开始监听端口上的请求连接。当accept()返回时,他会返回一个SocketChannel连接实例,实际上accept()是阻塞操作,他会阻塞带去线程知道返回一个连接; 很多时候我们是不满足于监听一个连接的,因此我们会把accept()的调用放到循环中,就像这样:

while(true){

SocketChannel socketChannel = serverSocketChannel.accept();

//do something with socketChannel...

}

当然我们可以在循环体内加上合适的中断逻辑,而不是单纯的在while循环中写true,以此来结束循环监听;

非阻塞模式

实际上ServerSocketChannel是可以设置为非阻塞模式的。在非阻塞模式下,调用accept()函数会立刻返回,如果当前没有请求的链接,那么返回值为空null。因此我们需要手动检查返回的SocketChannel是否为空,例如:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

serverSocketChannel.socket().bind(new InetSocketAddress(9999));

serverSocketChannel.configureBlocking(false);

while(true){

SocketChannel socketChannel = serverSocketChannel.accept();

if(socketChannel != null){

//do something with socketChannel...

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java NIO(New IO)是在 Java 1.4 中引入的,提供了一种新的 IO API,可以优化 IO 操作的速度和效率。以下是 Java NIO 中用到的一些类和接口: 1. java.nio.Buffer:这是所有缓冲区类的基类,定义了缓冲区的四个属性:容量、位置、限制和标记。 2. java.nio.ByteBuffer:这是字节缓冲区类,用于读写字节数据。 3. java.nio.CharBuffer:这是字符缓冲区类,用于读写字符数据。 4. java.nio.ShortBuffer、java.nio.IntBuffer、java.nio.LongBuffer、java.nio.FloatBuffer、java.nio.DoubleBuffer:这些都是基本类型的缓冲区类,用于读写不同类型的数据。 5. java.nio.channels.Channel:这是通道接口,表示一个可以进行 IO 操作的实体,例如文件或网络连接。 6. java.nio.channels.FileChannel:这是文件通道类,用于对文件进行读写操作。 7. java.nio.channels.SocketChannel:这是网络套接字通道类,用于对 TCP 连接进行读写操作。 8. java.nio.channels.ServerSocketChannel:这是网络服务器套接字通道类,用于监听客户端连接请求。 9. java.nio.channels.Selector:这是选择器类,用于监听多个通道的 IO 事件,避免使用多线程进行 IO 操作。 10. java.nio.charset.Charset:这是字符集类,用于进行字符编码和解码操作。 除了以上提到的类和接口,Java NIO 还有许多其他的类和接口,例如:java.nio.channels.Pipe、java.nio.channels.DatagramChanneljava.nio.channels.AsynchronousChannelGroup、java.nio.channels.AsynchronousServerSocketChanneljava.nio.channels.AsynchronousSocketChannel 等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值