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.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相关推荐
- 转:Java NIO系列教程(九) Pipe
Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 这里是Pipe原理的图示: 创建管道 通过Pi ...
- Java NIO系列教程(十二) Java NIO与IO
原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov 译者:郭蕾 校对:方腾飞 当学习了Java ...
- Java NIO系列教程(三) Buffer
2019独角兽企业重金招聘Python工程师标准>>> Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本 ...
- Java NIO系列教程(五) 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...
- Java NIO系列教程(四) Scatter/Gather
转载自 Java NIO系列教程(四) Scatter/Gather 译文地址 作者:Jakob Jenkov 译者:郭蕾 Java NIO开始支持scatter/gather,scatte ...
- Java NIO系列教程(十) Java NIO DatagramChannel
转载自 Java NIO系列教程(十) Java NIO DatagramChannel 译文链接 作者:Jakob Jenkov 译者:郑玉婷 校对:丁一 Java NIO中的 ...
- Java NIO系列教程(十一) Pipe
转载自 Java NIO系列教程(十一) Pipe 原文链接 作者:Jakob Jenkov 译者:黄忠 校对:丁一 Java NIO 管道是2个线程之间的单向数据连接. ...
- Java NIO系列教程(十 五)Java NIO Path
转载自 Java NIO系列教程(十 五)Java NIO Path 译文链接 译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...
- Java NIO 系列教程
Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...
最新文章
- 1.3 万亿条数据查询,知乎如何做到毫秒级响应?
- easyui-layout中的收缩层无法显示标题问题解决
- VTK:Points之FitImplicitFunction
- SSM-SpringMVC-07:SpringMVC中处理器映射器
- 开发转测试没人要_新人如何快速的进入融入软件测试行业?
- java问题,(x.equals(y) == true)有相同的hashCode 应该是不一定
- 制作 小 linux 教程,【NanoPi NEO Plus2开发板试用体验】编译uboot和linux制作最小根文件系统制作刷机包---详细教程...
- JavaScript关于json的处理
- mysql php 时间比较大小_mysql中日期大小比较实例
- 剑指offer之替换空格
- C语言函数如何返回字符串
- oracle sysman 不存在_Oracle数据库中SYS、SYSTEM、DBSNMP、SYSMAN四用户的区别
- 【转】Elasticsearch+Django搜索引擎(二)
- java sdk怎么配置_Java SDK环境配置教程
- 交换机的基本交换配置
- 转动惯量和电机的选型
- GWAS分析之绘制 SNP 密度图
- mongoose 入门(四)使用aggregate 聚合管道、使用 populate 实现关联查询
- 理解echo openssl概念、用法、常用参数
- Maximum Noise Fraction(MNF)算法理解
热门文章
- iOS开源程序下载链接整理
- cygwin下安装软件
- 字符串创建XML文档
- 【书评】OSPF Anatomy of an Internet Routing Protocol
- Oracle数据字典
- 使用主机ip地址绑定GooglAppEngine站点
- 解决Couldn't resolve host 'mirrorlist.centos.org
- XML专题:使用NSXMLParser解析xml文件
- ACR2010_MRI骶髂关节炎症与CTX-II变化以及TNF拮抗剂治疗过程中全身炎症改变相关...
- extract_first()