资讯专栏INFORMATION COLUMN

Java NIO ServerSocketChannel

forsigner / 1566人阅读

摘要:中的是一个可以监听新进来的连接的通道就像标准中的一样。当然也可以在循环中使用除了以外的其它退出准则。非阻塞模式可以设置成非阻塞模式。在非阻塞模式下,方法会立刻返回,如果还没有新进来的连接返回的将是。因此,需要检查返回的是否是如

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.open() 方法来打开ServerSocketChannel.如:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

关闭 ServerSocketChannel

通过调用ServerSocketChannel.close() 方法来关闭ServerSocketChannel. 如:

serverSocketChannel.close();

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

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

    //do something with socketChannel...
}

通过 ServerSocketChannel.accept() 方法监听新进来的连接。
当 accept()方法返回的时候,它返回一个包含新进来的连接的 SocketChannel。因此, accept()方法会一直阻塞到有新连接到达。
当然,也可以在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...
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71728.html

相关文章

  • Java NIO 的前生今世 之二 NIO Channel 小结

    摘要:通常来说所有的的操作都是从开始的一个类似于一个和对比我们可以在同一个中执行读和写操作然而同一个仅仅支持读或写可以异步地读写而是阻塞的同步读写总是从中读取数据或将数据写入到中类型有文件操作操作操作操作使用在服务器端这些通道涵盖了和网络以及文件 Java NIO Channel 通常来说, 所有的 NIO 的 I/O 操作都是从 Channel 开始的. 一个 channel 类似于一个 ...

    JasonZhang 评论0 收藏0
  • 基于零拷贝技术的的java NIO文件下载服务器

    摘要:什么是零拷贝我们首先来认识一下传统的操作。因为在这套体系里,不仅仅提供了非阻塞的编程模型,而且提供了类似零拷贝,内存映射这样的新技术对于操作系统来说早就有了。 什么是零拷贝?我们首先来认识一下传统的I/O操作。假如说用户进程现在要把一个文件复制到另一个地方。那么用户程序必须先把这个文件读入内存,然后再把内存里的数据写入另一个文件。不过文件读入内存也不是直接读入用户进程的内存,而是先读入...

    Keven 评论0 收藏0
  • java NIO

    摘要:是什么就不在此文展开,这篇主要来介绍下我们要怎样通过来构建一个服务客户端程序的。的通信完全依赖与,数据的写入和读取都是通过从中写入读取。和上的调用一样的功能,监听已经注册在上面的文件描述符,监听上的事件。 NIO是什么就不在此文展开,这篇主要来介绍下我们要怎样通过java NIO来构建一个服务客户端程序的。 0x01 涉及知识点 NIO建立一个服务端和客户端程序主要涉及的知识点有: ...

    AlphaWatch 评论0 收藏0
  • Java NIO深入理解ServerSocketChannel

    摘要:组件主要有三大核心部分通道,缓冲区选择器。选择区用于监听多个通道的事件比如连接打开,数据到达。即用选择器,借助单一线程,就可对数量庞大的活动通道实施监控和维护。 Java NIO 简介JAVA NIO有两种解释:一种叫非阻塞IO(Non-blocking I/O),另一种也叫新的IO(New I/O),其实是同一个概念。它是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越...

    masturbator 评论0 收藏0
  • Java NIO详解

    摘要:前言本篇主要讲解中的机制和网络通讯中处理高并发的分为两块第一块讲解多线程下的机制第二块讲解如何在机制下优化资源的浪费服务器单线程下的机制就不用我介绍了,不懂得可以去查阅下资料那么多线程下,如果进行套接字的使用呢我们使用最简单的服务器来帮助大 前言 本篇主要讲解Java中的IO机制和网络通讯中处理高并发的NIO 分为两块:第一块讲解多线程下的IO机制第二块讲解如何在IO机制下优化CPU资...

    rickchen 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<