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系列教程(六) SocketChannel和 ServerSocketChannel

Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服务器...

Java NIO系列教程(七) FileChannel

Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开FileCh...

Java NIO系列教程(三) Scatter/Gather 通道之间的数据传输

Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。 分散(...

Java NIO系列教程(七) FileChannel

转自:《》 Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 ...
  • yeruby
  • yeruby
  • 2014年08月04日 17:49
  • 429

Java NIO 系列教程(四)

阻塞式与非阻塞式(主要针对网络编程而言) 阻塞式: 比如到你某个时候到A楼一层(假如是内核缓冲区)取快递,但是你不知道快递什么时候过来,你又不能干别的事,只能死等着。 非阻塞式: 还是等快递的例子...
  • it_dx
  • it_dx
  • 2017年03月02日 20:58
  • 85

Java-NIO-系列教程 [http://download.csdn.net/download/shenhonglei1234/9531642]

下载地址:http://download.csdn.net/download/shenhonglei1234/9531642

4.Java NIO系列教程之Scatter/Gather

Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。 分散(...

8.Java NIO系列教程之FileChannel

Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开FileCh...

Java NIO系列教程

http://ifeve.com/overview/  并发编程网 – ifeve.com Java NIO系列教程(一) Java NIO 概述 原文链接     作者:...

Java NIO系列教程(四) Selector

Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。 下面...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java NIO系列教程(九) ServerSocketChannel
举报原因:
原因补充:

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