Java NIO(十) ServerSocketChannel

本文详细介绍了Java NIO中的ServerSocketChannel组件,包括如何创建、关闭ServerSocketChannel,以及如何使用它来监听传入的TCP连接。此外,还讨论了如何配置ServerSocketChannel以非阻塞模式运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java NIO ServerSocketChannel是一个可以侦听传入TCP连接的通道,就像标准Java Networking中的ServerSocket一样。 ServerSocketChannel类位于java.nio.channels包中。 这是一个例子:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

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

while(true){
    SocketChannel socketChannel =
            serverSocketChannel.accept();

    //do something with socketChannel...
}
复制代码

###Opening a ServerSocketChannel 通过调用ServerSocketChannel.open()方法打开一个ServerSocketChannel。 这是如何看起来如此:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
复制代码

###Closing a ServerSocketChannel 关闭ServerSocketChannel是通过调用ServerSocketChannel.close()方法完成的。 这是如何看起来如此:

serverSocketChannel.close(); ###监听传入的连接 监听传入的连接是通过调用ServerSocketChannel.accept()方法完成的。 accept()方法返回时,它将返回一个带有传入连接的SocketChannel。 因此,accept()方法阻塞,直到传入的连接到达。

由于您通常不希望只听一个连接,所以您可以在while循环中调用accept()。 这是如何看起来如此:

while(true){
    SocketChannel socketChannel =
            serverSocketChannel.accept();

    //do something with socketChannel...
}
复制代码

当然,你会在while循环中使用其他的停止标准。 ###非阻塞模式 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...
        }
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值