Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。
这里有个例子:
| 01 | ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); | 
 
| 03 | serverSocketChannel.socket().bind(newInetSocketAddress(9999)); | 
 
| 06 |     SocketChannel socketChannel = | 
 
| 07 |             serverSocketChannel.accept(); | 
 
| 09 |     //do something with socketChannel... | 
 
 
 
打开 ServerSocketChannel
通过调用 ServerSocketChannel.open() 方法来打开ServerSocketChannel.如:
| 1 | ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); | 
 
 
 
关闭 ServerSocketChannel
通过调用ServerSocketChannel.close() 方法来关闭ServerSocketChannel. 如:
| 1 | serverSocketChannel.close(); | 
 
 
 
监听新进来的连接
通过 ServerSocketChannel.accept() 方法监听新进来的连接。当 accept()方法返回的时候,它返回一个包含新进来的连接的 SocketChannel。因此, accept()方法会一直阻塞到有新连接到达。
通常不会仅仅只监听一个连接,在while循环中调用 accept()方法. 如下面的例子:
| 2 |     SocketChannel socketChannel = | 
 
| 3 |             serverSocketChannel.accept(); | 
 
| 5 |     //do something with socketChannel... | 
 
 
 
当然,也可以在while循环中使用除了true以外的其它退出准则。
非阻塞模式
ServerSocketChannel可以设置成非阻塞模式。在非阻塞模式下,accept() 方法会立刻返回,如果还没有新进来的连接,返回的将是null。 因此,需要检查返回的SocketChannel是否是null.如:
 
| 01 | ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); | 
 
| 03 | serverSocketChannel.socket().bind(newInetSocketAddress(9999)); | 
 
| 04 | serverSocketChannel.configureBlocking(false); | 
 
| 07 |     SocketChannel socketChannel = | 
 
| 08 |             serverSocketChannel.accept(); | 
 
| 10 |     if(socketChannel != null){ | 
 
| 11 |         //do something with socketChannel... | 
 
 
 												
												
						- 转:Java NIO系列教程(九) Pipe
		Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 这里是Pipe原理的图示: 创建管道 通过Pi ... 
- Java NIO系列教程(十一) Java NIO 与 IO
		Java NIO系列教程(十一) Java NIO与IO 当学习了 Java NIO 和 IO 的 API 后,一个问题马上涌入脑海: 我应该何时使用 IO,何时使用 NIO 呢?在本文中,我会尽量清 ... 
- Java NIO系列教程(三-十二) Buffer
		原文链接     作者:Jakob Jenkov     译者:airu     校对:丁一 Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到 ... 
- Java NIO系列教程(三) Channel之Socket通道
		目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> 在<Java NIO系列教程(二) Ch ... 
- Java NIO系列教程(二) Channel通道介绍及FileChannel详解
		目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> Channel是一个通道,可以通过它读取和写入 ... 
- Java NIO系列教程(八)JDK AIO编程
		目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ... 
- Java NIO系列教程(七) selector原理 Epoll版的Selector
		目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ... 
- Java NIO系列教程(十)DatagramChannel
		Java NIO系列教程(十)DatagramChannel 转载自并发编程网 – ifeve.com,本文链接地址: Java NIO系列教程(十) Java NIO DatagramChannel 
- Java NIO系列教程(四) Scatter 和 Gather
		Java NIO系列教程(四) Scatter 和 Gather Java NIO 开始支持 scatter/gather,scatter/gather 用于描述从 Channel(译者注:Chann ... 
随机推荐
	
									- hdu 4983 线段树+斐波那契数
			http://acm.hdu.edu.cn/showproblem.php?pid=4893 三种操作: 1 k d, 修改k的为值增加d 2 l r, 查询l到r的区间和 3 l r, 从l到r区间 ... 
- CI
			做项目时,经常会碰到需要使用php的情况,自己也下决心把php好好学一下. 先从CI开始,再看一下项目中的php代码是如何写的. 
- bootstrap 警告框多个删除
			<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ... 
- java 调用c++程序实例
			1.java程序: package com.zhangshitong; import java.io.File; public class Java2cpp { static{ System.load ... 
- windows 2008远程桌面企业协议号
			windows 2008远程桌面企业协议号 6565792 (2015-01-07 14:47:31) 转载▼ 标签: it 桌面 终端服务器 客户端 服务器 分类: 操作系统/办公软件 微软的终端服 ... 
- FastReport自动换行及行高自适应
			
			
- c# file 上传EXCEL文件,以流的形式读取数据
			1.引入  Aspose.Cells public void test() { HttpFileCollection filelist = HttpContext.Current.Request.Fi ... 
- Method not found: 'System.Data.Entity.ModelConfiguration.Configuration.XXX
			使用EF flument API  修改映射数据库字段的自增长 modelBuilder.Entity<Invoice>().Property(p => p.Id).HasDatab ... 
- [Vue] vue-cli3.0安装
			1. node.js安装https://nodejs.org/en/download/ 2.npm的安装 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了.同样可以通过输入 &qu ... 
- dubbo+zookeeper注册服务报错问题:No service registed on zookeeper
			2019-04-04 11:23:40,372 ERROR [tomcat-threads--1] (com.bill99.dolphin.controller.ExceptionController ...