`
youyu4
  • 浏览: 440135 次
社区版块
存档分类
最新评论

java NIO 之 ServerSocketChannel

 
阅读更多

java NIO 之 ServerSocketChannel

 

 

Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的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...
}

 

 

 

打开 ServerSocketChannel

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

 

 

 

关闭 ServerSocketChannel

serverSocketChannel.close();

 

 

 

监听新进来的连接

 

通过 ServerSocketChannel.accept() 方法监听新进来的连接。当 accept()方法返回的时候,它返回一个包含新进来的连接的 SocketChannel。因此, accept()方法会一直阻塞到有新连接到达。

 

通常不会仅仅只监听一个连接,在while循环中调用 accept()方法. 如下面的例子:

while(true){
    SocketChannel socketChannel =
            serverSocketChannel.accept();
 
    //do something with socketChannel...
}

 

当然,也可以在while循环中使用除了true以外的其它退出准则。

 

 

 

 

非阻塞模式

 

ServerSocketChannel可以设置成非阻塞模式。在非阻塞模式下,accept() 方法会立刻返回,如果还没有新进来的连接,返回的将是null。 因此,需要检查返回的SocketChannel是否是null.如:

 

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...
    }
}

 

分享到:
评论

相关推荐

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 ...Java NIO系列教程(九) ServerSocketChannel Java NIO系列教程(十) Java NIO DatagramChannel Java NIO系列教程(十一) Pipe Java NIO系列教程(十二) Java NIO与IO

    java NIO.zip

    Java NIO支持多种类型的通道,包括文件通道(FileChannel)、套接字通道(SocketChannel)和服务器套接字通道(ServerSocketChannel)等。通道可以同时进行读写操作,并且可以实现异步读写。 2. **缓冲区(Buffers...

    Java NIO英文高清原版

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据...

    【IT十八掌徐培成】Java基础第27天-02.NIO-ServerSocketChannel-SocketChannel.zip

    在本教程中,"IT十八掌徐培成"将带领我们深入理解Java NIO中的ServerSocketChannel和SocketChannel。 1. **ServerSocketChannel**: ServerSocketChannel是Java NIO中用于服务器端监听客户端连接的通道。通过调用`...

    java NIO实例

    在`NIOServer.java`中,服务器端首先会初始化Selector并注册ServerSocketChannel,之后进入一个无限循环,调用selector.select()方法等待事件发生。当有客户端连接时,服务器会处理新连接,创建SocketChannel,并将...

    java nio 实现socket

    **NIO非阻塞模式**:相比之下,NIO采用了非阻塞模式,即当没有数据可读时,`read()`方法不会阻塞,而是立即返回。这意味着应用程序可以同时处理多个输入/输出操作,而不需要为每个操作分配一个独立的线程。这样的...

    一个java NIO的例子

    Java NIO提供了多种类型的通道,如FileChannel用于文件操作,SocketChannel和ServerSocketChannel用于网络通信,DatagramChannel用于UDP通信。通道可以进行读写操作,并且是非阻塞的,这意味着如果数据未准备好,...

    Java NIO实战开发多人聊天室

    08-Java NIO-Channel-ServerSocketChannel.mp4 09-Java NIO-Channel-SocketChannel.mp4 10-Java NIO-Channel-DatagramChannel.mp4 11-Java NIO-Channel-分散和聚集.mp4 12-Java NIO-Buffer-概述.mp4 13-Java NIO-...

    Java NIO Socket基本

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(同步阻塞I/O)相对。NIO在Java 1.4版本引入,其设计目标是提供一种更高效、更灵活的I/O操作方式,特别适合处理大量并发连接...

    java NIO详细教程

    ### Java NIO 详细教程知识点解析 #### 一、Java NIO 概述 Java NIO(New IO)是Java平台提供的一种新的IO操作模式,它首次出现在Java 1.4版本中,并在后续版本中不断完善。Java NIO 的设计目的是为了克服传统Java ...

    基于java NIO的socket通信demo

    Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(BIO)模型不同,NIO提供了非阻塞的读写方式,提高了系统在处理大量并发连接时的效率。在这个“基于java NIO的socket通信demo...

    Java NIO 中英文版

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准的I/O模型的一种新机制。在传统的Java I/O中,使用的是Blocking I/O,即阻塞式I/O,这种模型下,线程在等待数据就绪时会被...

    java NIO推送实例

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O 不同,NIO 具有非阻塞的特性,可以提高在高并发场景下的处理能力。在这个实例中,"java NIO 消息推送实例" 旨在展示如何使用...

    JavaNIO.pdf

    Java NIO中提供了多种类型的通道,如ByteChannel、GatheringByteChannel、InterruptibleChannel、ReadableByteChannel、ScatteringByteChannel、WritableByteChannel、DatagramChannel、FileChannel、...

    Java NIO 中英文版 + Pro Java 7 NIO.2

    7. **网络编程**:Java NIO引入了SocketChannel和ServerSocketChannel,用于实现高效的TCP/IP和UDP/IP通信。这些通道与传统的Socket和ServerSocket相比,提供了非阻塞的特性。 `Pro Java 7 NIO.2`这本书由Anghel ...

    JAVA nio的一个简单的例子

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种I/O模型,旨在提供一种更高效、更具弹性的I/O处理方式。相比于传统的BIO( Blocking I/O)模型,NIO在处理高并发和大...

    JAVA NIO学习网站

    Java NIO(New IO)是Java 1.4版本引入的一个新API,全称为New Input/Output,是对传统IO(Old IO)的扩展。...对于从事Java后端开发或者网络编程的工程师来说,深入理解并熟练运用Java NIO是必备的技能之一。

Global site tag (gtag.js) - Google Analytics