Java NIO服务器:远程主机强迫关闭了一个现有的连接
来源:互联网 发布:程序员要懂软件架构吗 编辑:程序博客网 时间:2024/06/04 18:44
转自:http://blog.csdn.net/abc_key/article/details/29295569
Java NIO服务器:远程主机强迫关闭了一个现有的连接
分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。
Java NIO聊天室 中,若客户端强制关闭,服务器会报“Java.io.IOException: 远程主机强迫关闭了一个现有的连接。”,并且服务器会在报错后停止运行,错误的意思就是客户端关闭了,但是服务器还在从这个套接字通道读取数据,便抛出IOException,导致这种情况出现的原因就是,客户端异常关闭后,服务器的选择器会获取到与客户端套接字对应的套接字通道SelectionKey,并且这个key的兴趣是OP_READ,执行从这个通道读取数据时,客户端已套接字已关闭,所以会出现“java.io.IOException: 远程主机强迫关闭了一个现有的连接”的错误。解决这种问题也很简单,就是服务器在读取数据时,若发生异常,则取消当前key并关闭通道,如下代码:
因在catch中取消了key,readMsg返回后,run方法继续往下走,之前的代码会报“java.nio.channels.CancelledKeyException”错误,所以需要判断当前key是否有效,
之前的代码:
修复后的代码:这样改良之后的聊天室服务端,客户端异常强制关闭后,服务器便会妥善处理了,也不会报错,更不会停止运行。改良之后还算比较稳定运行的。 0 0
- Java NIO服务器:远程主机强迫关闭了一个现有的连接
- Java NIO服务器:远程主机强迫关闭了一个现有的连接
- tcp nio 远程主机强迫关闭了一个现有的连接
- 远程主机强迫关闭了一个现有的连接。
- UDP 远程主机强迫关闭了一个现有的连接
- 远程主机强迫关闭了一个现有的连接
- 远程主机强迫关闭了一个现有的连接
- 远程主机强迫关闭了一个现有的连接
- 远程主机强迫关闭了一个现有的连接
- java.sql.SQLException: Io 异常: 远程主机强迫关闭了一个现有的连接。
- java.io.IOException: 远程主机强迫关闭了一个现有的连接。 Error while Installing APK
- Netty学习4—NIO服务端报错:远程主机强迫关闭了一个现有的连接
- Eclipse连接模拟器时报错:远程主机强迫关闭了一个现有的连接
- 解决DeviceMonitor]Adb connection Error:远程主机强迫关闭了一个现有的连接 的方法
- 解决“Adb connection Error:远程主机强迫关闭了一个现有的连接”的问题
- MyEclipse 的svn插件报错"远程主机强迫关闭了一个现有的连接"
- "Adb connection Error:远程主机强迫关闭了一个现有的连接"的解决方法
- “Adb connection Error:远程主机强迫关闭了一个现有的连接。”之我的解决方法。
- 123
- 浅析 Linux 初始化 init 系统: Systemd(2)
- JAVA爬虫初识之httpclient与jsoup
- CentOS服务器安装内容
- OpenCV学习之矩阵图像处理(三)
- Java NIO服务器:远程主机强迫关闭了一个现有的连接
- 数据库死锁及解决方法
- 酒店、出行等日期的选择
- Activity Intent Flags及Task相关属性
- 会话管理 Cookie&session
- 使用awk批量杀进程的命令
- [Caffe]:关于Check failed: shape[i] >= 0 (-2 vs. 0)错误
- 19.Remove Nth Node From End of List
- IE 播放wav文件