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();
serverSocketChannel.close();

监听新进来的连接

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

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

while(true){SocketChannel socketChannel =serverSocketChannel.accept();//do something with socketChannel...
}
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...}
} 

文章转自 并发编程网-ifeve.com

Java NIO系列教程(九) ServerSocketChannel相关推荐

  1. 转:Java NIO系列教程(九) Pipe

    Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 这里是Pipe原理的图示: 创建管道 通过Pi ...

  2. Java NIO系列教程(十二) Java NIO与IO

    原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞 当学习了Java ...

  3. Java NIO系列教程(三) Buffer

    2019独角兽企业重金招聘Python工程师标准>>> Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本 ...

  4. Java NIO系列教程(五) 通道之间的数据传输

    在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...

  5. Java NIO系列教程(四) Scatter/Gather

    转载自   Java NIO系列教程(四) Scatter/Gather 译文地址  作者:Jakob Jenkov   译者:郭蕾 Java NIO开始支持scatter/gather,scatte ...

  6. Java NIO系列教程(十) Java NIO DatagramChannel

    转载自  Java NIO系列教程(十) Java NIO DatagramChannel 译文链接    作者:Jakob Jenkov    译者:郑玉婷     校对:丁一 Java NIO中的 ...

  7. Java NIO系列教程(十一) Pipe

    转载自  Java NIO系列教程(十一) Pipe 原文链接     作者:Jakob Jenkov     译者:黄忠       校对:丁一 Java NIO 管道是2个线程之间的单向数据连接. ...

  8. Java NIO系列教程(十 五)Java NIO Path

    转载自  Java NIO系列教程(十 五)Java NIO Path 译文链接  译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...

  9. Java NIO 系列教程

    Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...

最新文章

  1. 1.3 万亿条数据查询,知乎如何做到毫秒级响应?
  2. easyui-layout中的收缩层无法显示标题问题解决
  3. VTK:Points之FitImplicitFunction
  4. SSM-SpringMVC-07:SpringMVC中处理器映射器
  5. 开发转测试没人要_新人如何快速的进入融入软件测试行业?
  6. java问题,(x.equals(y) == true)有相同的hashCode 应该是不一定
  7. 制作 小 linux 教程,【NanoPi NEO Plus2开发板试用体验】编译uboot和linux制作最小根文件系统制作刷机包---详细教程...
  8. JavaScript关于json的处理
  9. mysql php 时间比较大小_mysql中日期大小比较实例
  10. 剑指offer之替换空格
  11. C语言函数如何返回字符串
  12. oracle sysman 不存在_Oracle数据库中SYS、SYSTEM、DBSNMP、SYSMAN四用户的区别
  13. 【转】Elasticsearch+Django搜索引擎(二)
  14. java sdk怎么配置_Java SDK环境配置教程
  15. 交换机的基本交换配置
  16. 转动惯量和电机的选型
  17. GWAS分析之绘制 SNP 密度图
  18. mongoose 入门(四)使用aggregate 聚合管道、使用 populate 实现关联查询
  19. 理解echo openssl概念、用法、常用参数
  20. Maximum Noise Fraction(MNF)算法理解

热门文章

  1. iOS开源程序下载链接整理
  2. cygwin下安装软件
  3. 字符串创建XML文档
  4. 【书评】OSPF Anatomy of an Internet Routing Protocol
  5. Oracle数据字典
  6. 使用主机ip地址绑定GooglAppEngine站点
  7. 解决Couldn't resolve host 'mirrorlist.centos.org
  8. XML专题:使用NSXMLParser解析xml文件
  9. ACR2010_MRI骶髂关节炎症与CTX-II变化以及TNF拮抗剂治疗过程中全身炎症改变相关...
  10. extract_first()