博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java NIO系列教程(九) ServerSocketChannel
阅读量:5144 次
发布时间:2019-06-13

本文共 1503 字,大约阅读时间需要 5 分钟。

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

转载于:https://www.cnblogs.com/like-minded/p/5160114.html

你可能感兴趣的文章
eclipse 怎么查看相关引用
查看>>
pprint模块介绍
查看>>
命令行查看端口
查看>>
Vim复制一整行和复制多行
查看>>
时光穿梭机
查看>>
NVIDIA GRID 和 NICE DCV 技术用于实现 Linux 和 Windows® 图形加速虚拟桌面
查看>>
codevs——T2488 绿豆蛙的归宿
查看>>
MSIL实用指南-闭包的生成和调用
查看>>
使用Roslyn脚本化C#代码,C#动态脚本实现方案
查看>>
JDK dump
查看>>
Jenkins-在windows上安装及其部署
查看>>
【推荐收藏】10个获取免费网页背景纹理的最佳网站
查看>>
素材锦囊:50套高质量的 PSD 素材免费下载《下篇》
查看>>
帮助你在 Photoshop 中轻松实现长阴影效果的工具
查看>>
hdu 4602 递推关系矩阵快速幂模
查看>>
[Dynamics 365] 关于Currency的一点随笔
查看>>
【Android】activity-alias的使用
查看>>
熟悉常用的HDFS操作
查看>>
Hadoop综合大作业
查看>>
GDB学习之道:GDB调试精粹及使用实例
查看>>