NIO 03
1. 客户端要主动去连接:channel.connect(new InetSocketAddress("localhost",8888)); //用channel.finishConnect();才能完成连接
2. 客户端的阻塞配置放到连接前面:socketClient.configureBlocking(false);
3. 客户端连接成功以后要断开连接:
// 如果正在连接,则完成连接
if(channel.isConnectionPending()){
channel.finishConnect();
}
4. 往通道里写数据:channel.write(ByteBuffer.wrap(new String("向服务端发送了一条信息").getBytes())); 从通道里读数据:channel.read(buffer);
5. 客户端调用:channel.close(), 服务端从channel中读取数据返回值为-1。
如果强制关闭客户端,服务器端会报异常:java.io.IOException: 远程主机强迫关闭了一个现有的连接。需要对服务器端通道做关闭处理,否则会一直异常。
6. 判断连接的类型:key.isConnectable(),key.isReadable(),key.isAcceptable()
8. java.io.IOException: 远程主机强迫关闭了一个现有的连接。
出现该异常的原因是因为:客户端没有调用close,直接关闭了通道,导致服务器端的连接通道依旧处于可读状态,但却无法读取数据,所以报IO异常。
这里需要加一个异常捕获,在捕获到异常后,服务器端应该主动关闭通道连接。
参考:http://blog.csdn.net/abc_key/article/details/29295569
9. 当客户端通道调用close()方法关闭通道的时候,服务端从通道读取获取的值为:-1。这里需要加一个判断,来关闭服务器端通道。
NIO 03的更多相关文章
- Linux NIO 系列(03) 非阻塞式 IO
目录 一.非阻塞式 IO 附:非阻塞式 IO 编程 Linux NIO 系列(03) 非阻塞式 IO Netty 系列目录(https://www.cnblogs.com/binarylei/p/10 ...
- NIO 源码分析(03) 从 BIO 到 NIO
目录 一.NIO 三大组件 Channels.Buffers.Selectors 1.1 Channel 和 Buffer 1.2 Selector 1.3 Linux IO 和 NIO 编程的区别 ...
- NIO复习03
SocketChannel: 1. Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道.可以通过以下2种方式创建SocketChannel: 打开一个SocketChan ...
- Netty快速入门(03)Java NIO 介绍-Buffer
NIO 介绍 NIO,可以说是New IO,也可以说是non-blocking IO,具体怎么解释都可以. NIO 1是在JSR51里面定义的,在JDK1.4中引入,因为BolckingIO不支持高并 ...
- 源码分析netty服务器创建过程vs java nio服务器创建
1.Java NIO服务端创建 首先,我们通过一个时序图来看下如何创建一个NIO服务端并启动监听,接收多个客户端的连接,进行消息的异步读写. 示例代码(参考文献[2]): import java.io ...
- nio加强服务端并发
究了一下Android推送,方式很多,比如用框架或者用第三方服务,在此并不讨论个中优劣.抱着学习的态度,本人不太喜欢用一些现成的东西,所以自己动手实现了一套简单的推送机制.使用TCP长连接,完成服务器 ...
- Java NIO 之缓冲区
缓冲区基础 所有的缓冲区都具有四个属性来 供关于其所包含的数据元素的信息. capacity(容量):缓冲区能够容纳数据的最大值,创建缓冲区后不能改变. limit(上界):缓冲区的第一个不能被读或写 ...
- java nio之SocketChannel
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道.可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的某台服务器. ...
- 基于MINA构建简单高性能的NIO应用
mina是非常好的C/S架构的java服务器,这里转了一篇关于它的使用感受. 前言MINA是Trustin Lee最新制作的Java通讯框架.通讯框架的主要作用是封装底层IO操作,提供高级的操作API ...
随机推荐
- Struts2_day03--向值栈放数据
向值栈放数据 1 向值栈放数据多种方式 第一种 获取值栈对象,调用值栈对象里面的 set 方法 第二种 获取值栈对象,调用值栈对象里面的 push方法 第三种 在action定义变量,生成变量的ge ...
- Redis异构集群数据在线迁移工具Redis-Migrate-Tool【转】
摘要:Redis-Migrate-Tool(后面都简称RMT),是唯品会开源的redis数据迁移工具,主要用于异构redis集群间的数据在线迁移,即数据迁移过程中源集群仍可以正常接受业务读写请求,无业 ...
- Android无线测试之—UiAutomator UiScrollable API介绍六
向前与向后滚动API 一.向前与向后滚动相关API 返回值 API 描述 boolean scrollBackward(int steps) 自动以步长向后滑动 boolean scrollBackw ...
- 三、Gradle初级教程——Gradle除了签名打包还能配置jar包
1.gradle概念 构建工具,Groovy,Java. 2.gradle配置jar包,和libs文件夹导入jar包的区别 到此,还是这种方法导入JAR包比较方便.每次更新JAR包,只需要修改版本号就 ...
- centos6安装系统时选包
date: 2018-06-05 11:44:06 1,系统:minimal 2,包组: Base System : Base.Compatibility libraries.Deb ...
- SSH电力项目九--运行监控首页显示
需求:在首页显示出设备运行情况,并去掉<br>换行符,每隔十分钟刷新一次页面. ElecMenuAction.java 首先注入运行监控service public class ElecM ...
- oracle的between用来判断时间区间
SELECT * FROM warning_form wfwhere wf.start_time between trunc(sysdate,'mm') and sysdate; start_time ...
- linux的/etc/hosts的作用
转自:http://blog.chinaunix.net/uid-28559065-id-4145820.html linux /etc/hosts文件作用 分类: LINUX linux /e ...
- linux下如何启动nginx?
命令: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ........... [root@localhost sbin ...
- Vue基础-匿名插槽与作用域插槽的合并和覆盖行为
Vue 测试版本:Vue.js v2.5.13 Vue 文档: <slot> 元素可以用一个特殊的特性 name 来进一步配置如何分发内容.多个插槽可以有不同的名字.具名插槽将匹配内容片段 ...