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的更多相关文章

  1. Linux NIO 系列(03) 非阻塞式 IO

    目录 一.非阻塞式 IO 附:非阻塞式 IO 编程 Linux NIO 系列(03) 非阻塞式 IO Netty 系列目录(https://www.cnblogs.com/binarylei/p/10 ...

  2. NIO 源码分析(03) 从 BIO 到 NIO

    目录 一.NIO 三大组件 Channels.Buffers.Selectors 1.1 Channel 和 Buffer 1.2 Selector 1.3 Linux IO 和 NIO 编程的区别 ...

  3. NIO复习03

    SocketChannel: 1. Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道.可以通过以下2种方式创建SocketChannel: 打开一个SocketChan ...

  4. Netty快速入门(03)Java NIO 介绍-Buffer

    NIO 介绍 NIO,可以说是New IO,也可以说是non-blocking IO,具体怎么解释都可以. NIO 1是在JSR51里面定义的,在JDK1.4中引入,因为BolckingIO不支持高并 ...

  5. 源码分析netty服务器创建过程vs java nio服务器创建

    1.Java NIO服务端创建 首先,我们通过一个时序图来看下如何创建一个NIO服务端并启动监听,接收多个客户端的连接,进行消息的异步读写. 示例代码(参考文献[2]): import java.io ...

  6. nio加强服务端并发

    究了一下Android推送,方式很多,比如用框架或者用第三方服务,在此并不讨论个中优劣.抱着学习的态度,本人不太喜欢用一些现成的东西,所以自己动手实现了一套简单的推送机制.使用TCP长连接,完成服务器 ...

  7. Java NIO 之缓冲区

    缓冲区基础 所有的缓冲区都具有四个属性来 供关于其所包含的数据元素的信息. capacity(容量):缓冲区能够容纳数据的最大值,创建缓冲区后不能改变. limit(上界):缓冲区的第一个不能被读或写 ...

  8. java nio之SocketChannel

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

  9. 基于MINA构建简单高性能的NIO应用

    mina是非常好的C/S架构的java服务器,这里转了一篇关于它的使用感受. 前言MINA是Trustin Lee最新制作的Java通讯框架.通讯框架的主要作用是封装底层IO操作,提供高级的操作API ...

随机推荐

  1. Struts2_day03--向值栈放数据

    向值栈放数据 1 向值栈放数据多种方式 第一种 获取值栈对象,调用值栈对象里面的 set 方法 第二种 获取值栈对象,调用值栈对象里面的  push方法 第三种 在action定义变量,生成变量的ge ...

  2. Redis异构集群数据在线迁移工具Redis-Migrate-Tool【转】

    摘要:Redis-Migrate-Tool(后面都简称RMT),是唯品会开源的redis数据迁移工具,主要用于异构redis集群间的数据在线迁移,即数据迁移过程中源集群仍可以正常接受业务读写请求,无业 ...

  3. Android无线测试之—UiAutomator UiScrollable API介绍六

    向前与向后滚动API 一.向前与向后滚动相关API 返回值 API 描述 boolean scrollBackward(int steps) 自动以步长向后滑动 boolean scrollBackw ...

  4. 三、Gradle初级教程——Gradle除了签名打包还能配置jar包

    1.gradle概念 构建工具,Groovy,Java. 2.gradle配置jar包,和libs文件夹导入jar包的区别 到此,还是这种方法导入JAR包比较方便.每次更新JAR包,只需要修改版本号就 ...

  5. centos6安装系统时选包

    date: 2018-06-05   11:44:06 1,系统:minimal   2,包组:     Base System :  Base.Compatibility libraries.Deb ...

  6. SSH电力项目九--运行监控首页显示

    需求:在首页显示出设备运行情况,并去掉<br>换行符,每隔十分钟刷新一次页面. ElecMenuAction.java 首先注入运行监控service public class ElecM ...

  7. oracle的between用来判断时间区间

    SELECT * FROM warning_form wfwhere wf.start_time between trunc(sysdate,'mm') and sysdate; start_time ...

  8. linux的/etc/hosts的作用

    转自:http://blog.chinaunix.net/uid-28559065-id-4145820.html  linux /etc/hosts文件作用   分类: LINUX linux /e ...

  9. linux下如何启动nginx?

    命令: /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ........... [root@localhost sbin ...

  10. Vue基础-匿名插槽与作用域插槽的合并和覆盖行为

    Vue 测试版本:Vue.js v2.5.13 Vue 文档: <slot> 元素可以用一个特殊的特性 name 来进一步配置如何分发内容.多个插槽可以有不同的名字.具名插槽将匹配内容片段 ...