UDN-企业互联网技术人气社区

板块导航

浏览  : 298
回复  : 1

[讨论交流] Java NIO 系列教程(九)ServerSocketChannel

[复制链接]
genie1003的头像 楼主
发表于 2016-8-3 09:23:59 | 显示全部楼层 |阅读模式
  Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。

  这里有个例子:
  1. ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

  2. serverSocketChannel.socket().bind(new InetSocketAddress(9999));

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

  6.     //do something with socketChannel...
  7. }
复制代码

  打开 ServerSocketChannel

  通过调用 ServerSocketChannel.open() 方法来打开ServerSocketChannel.如:
  1. ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
复制代码

  关闭 ServerSocketChannel

  通过调用ServerSocketChannel.close() 方法来关闭ServerSocketChannel. 如:
  1. serverSocketChannel.close()<span style="line-height: 1.5; background-color: rgb(255, 255, 255);">;</span>
复制代码
  监听新进来的连接

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

  通常不会仅仅只监听一个连接,在while循环中调用 accept()方法. 如下面的例子:
  1. while(true){
  2.     SocketChannel socketChannel =
  3.             serverSocketChannel.accept();

  4.     //do something with socketChannel...
  5. }
复制代码

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

  非阻塞模式

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

  2. serverSocketChannel.socket().bind(new InetSocketAddress(9999));
  3. serverSocketChannel.configureBlocking(false);

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

  7.     if(socketChannel != null){
  8.         //do something with socketChannel...
  9.     }
  10. }
复制代码

  扩展阅读:

  Java NIO系列教程(汇总)

相关帖子

发表于 2016-8-3 10:40:26 | 显示全部楼层
赞,帖子很棒!
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部