Java NIO系列教程(九) ServerSocketChannel

原创 2016年06月02日 11:12:21

Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。


这里有个例子:

01 ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
02  
03 serverSocketChannel.socket().bind(new InetSocketAddress(9999));
04  
05 while(true){
06     SocketChannel socketChannel =
07             serverSocketChannel.accept();
08  
09     //do something with socketChannel...
10 }

打开 ServerSocketChannel

通过调用 ServerSocketChannel.open() 方法来打开ServerSocketChannel.如:

1 ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();

关闭 ServerSocketChannel

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

1 serverSocketChannel.close();

监听新进来的连接

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

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

1 while(true){
2     SocketChannel socketChannel =
3             serverSocketChannel.accept();
4  
5     //do something with socketChannel...
6 }

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

非阻塞模式

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

01 ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
02  
03 serverSocketChannel.socket().bind(new InetSocketAddress(9999));
04 serverSocketChannel.configureBlocking(false);
05  
06 while(true){
07     SocketChannel socketChannel =
08             serverSocketChannel.accept();
09  
10     if(socketChannel != null){
11         //do something with socketChannel...
12     }
13 }
版权声明:本文为博主原创文章,未经博主允许不得转载。

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

原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞 当学习了J...
  • fw0124
  • fw0124
  • 2015年03月17日 15:22
  • 1788

java nio SocketChannel 服务器端与多客户端 信息交互(聊天功能)

服务端代码:
  • tang9140
  • tang9140
  • 2014年09月04日 15:13
  • 4677

netty5笔记-总体流程分析4-NioSocketChannel之服务端视角

NioSocketChannel之服务端视角 上篇文章对NioServerSocketChannel进行了分析,了解了一个客户端连接在netty中是如何接收的。本篇我们将详细的了解服务端收到的连接的...
  • youaremoon
  • youaremoon
  • 2016年01月13日 11:40
  • 3442

Java NIO系列教程(六) SocketChannel和 ServerSocketChannel

Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服务器...
  • z742182637
  • z742182637
  • 2017年03月27日 09:44
  • 202

Java NIO系列教程

  • 2017年11月19日 13:27
  • 177KB
  • 下载

7.Java NIO系列教程之Server/Client完整示例

TCPServer类: package com.gw.demo; import java.io.IOException; import java.net.InetSocketAddress; imp...
  • shihuacai
  • shihuacai
  • 2015年01月23日 15:22
  • 2170

java NIO系列教程(七)

转载自并发编程网 – ifeve.com本文链接地址: Java NIO系列教程(七) FileChannel Java NIO中的FileChannel是一个连接到文件的通道。可以通过...
  • qq_26212693
  • qq_26212693
  • 2017年06月16日 16:08
  • 74

java NIO系列教程(一)

转载自并发编程网 – ifeve.com本文链接地址: Java NIO系列教程(一) Java NIO 概述 Java NIO 由以下几个核心部分组成: ChannelsBuff...
  • qq_26212693
  • qq_26212693
  • 2017年06月16日 15:54
  • 50

Java NIO系列教程(七) FileChannel

转载自并发编程网 – ifeve.com本文链接地址: Java NIO系列教程(七) FileChannelJava NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件...
  • u012834750
  • u012834750
  • 2017年07月20日 09:28
  • 89

Java NIO系列教程

Java NIO系列教程(一) Java NIO 概述 原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一 Java NIO 由以下几个核心部分组成...
  • liou825
  • liou825
  • 2014年01月08日 15:38
  • 584
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java NIO系列教程(九) ServerSocketChannel
举报原因:
原因补充:

(最多只允许输入30个字)