java nio 强制关闭_Java NIO服务器:远程主机强迫关闭了一个现有的连接
Java NIO聊天室 中,若客户端强制关闭,服务器会报“java.io.IOException: 远程主机强迫关闭了一个现有的连接。”,并且服务器会在报错后停止运行,错误的意思就是客户端关闭了,但是服务器还在从这个套接字通道读取数据,便抛出IOException,导致这种情况出现的原因就是,客户端异常关闭后,服务器的选择器会获取到与客户端套接字对应的套接字通道SelectionKey,并且这个key的兴趣是OP_READ,执行从这个通道读取数据时,客户端已套接字已关闭,所以会出现“java.io.IOException:
远程主机强迫关闭了一个现有的连接”的错误。解决这种问题也很简单,就是服务器在读取数据时,若发生异常,则取消当前key并关闭通道,如下代码:
//获取此key对应的套接字通道
SocketChannel channel = (SocketChannel) key.channel();
//创建一个大小为1024k的缓存区
ByteBuffer buffer = ByteBuffer.allocate(1024);
StringBuffer sb = new StringBuffer();
//将通道的数据读到缓存区
int count = 0;
try{
count = channel.read(buffer);
}catch(IOException e){
key.cancel();
channel.socket().close();
channel.close();
return;
}
因在catch中取消了key,readMsg返回后,run方法继续往下走,之前的代码会报“java.nio.channels.CancelledKeyException”错误,所以需要判断当前key是否有效,
之前的代码:
//若此key的通道的行为是"读"
if (key.isReadable()) {
readMsg(key);
}
//若次key的通道的行为是"写"
if (key.isWritable()) {
writeMsg(key);
}修复后的代码:
//若此key的通道的行为是"读"
if (key.isValid() && key.isReadable()) {
readMsg(key);
}
//若次key的通道的行为是"写"
if (key.isValid() && key.isWritable()) {
writeMsg(key);
}这样改良之后的聊天室服务端,客户端异常强制关闭后,服务器便会妥善处理了,也不会报错,更不会停止运行。改良之后还算比较稳定运行的。
java nio 强制关闭_Java NIO服务器:远程主机强迫关闭了一个现有的连接相关推荐
- mysql远程主机强迫关闭了_HAProxy出现远程主机强迫关闭了一个现有的连接 的错误及解决...
使用haproxy作为sql server 的负载均衡器. 使用了文档中的示例配置项: timeout client 50s timeout server 50s 采用这个配置项,有时会出现" ...
- java.io.IOException: 远程主机强迫关闭了一个现有的连接
摆脱烦恼最有效的是慢思考,为什么和我想的不一样,出入在哪里,什么导致的? 疑惑 我使用netty框架接受数据,每隔半个小时存储数据,运行不到三个小时报错 java.io.IOException: 远程 ...
- SpringBoot整合Redis:java.io.IOException: 远程主机强迫关闭了一个现有的连接。或者控制台报连接超时异常
场景: 项目启动过后 Redis 连接过一会就会断开,报如下问题: 问题1: 2022-12-05 23:05:18.287 ERROR 10752 --- [sson-netty-1-11] o.r ...
- 关于Redis出现“java.io.IOException: 远程主机强迫关闭了一个现有的连接”的一次排查
背景 最近在使用springboot(Windows下)连接redis(云服务器)开发时发现一些问题:连接成功的情况下,在一段时间未交互数据后,再次通过连接与Redis传输数据回出现异常java.io ...
- c#中udp客户端连接遇到的问题 “远程主机强制关闭了一个现有的连接”
C# 远程主机强制关闭了一个现有的连接 这个问题是因为我服务端没有打开相应端口去监听,所以必然会报这个错误,问题是如何在服务端不打开端口的情况下发送端不报这个错误,有没有什么方法忽略他. 用try . ...
- java.io.IOException: 远程主机强迫关闭了一个现有的连接。
参考文档: (2条消息) 解决redis中java.io.IOException: 远程主机强迫关闭了一个现有的连接_zeal9s的博客-CSDN博客_redis远程主机强迫关闭了一个现有连接怎么解决 ...
- Netty报错 远程主机强迫关闭了一个现有的连接 异常
百度百科的描述 Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客 ...
- sonarqube 启动不了,异常提示:远程主机强迫关闭了一个现有的连接
启动sonarqube 6.7.1 报下面的错误: 2018.01.24 10:10:56 WARN app[][o.e.t.n.Netty4Transport] exception caught o ...
- 远程计算机强迫关闭一个连接,远程主机强迫关闭了一个现有的连接。
org.apache.catalina.connector.ClientAbortException: java.io.IOException: 远程主机强迫关闭了一个现有的连接. at org.ap ...
最新文章
- SA区坏道数据恢复的经历
- 下载linux操作系统一般的初始账号密码(虚拟机)
- Python基础教程:repr()与str() 的区别
- 发送请求_发送soap请求调用wsdl服务
- OpenCV使用VideoCapture和VideoWriter的实例(附完整代码)
- nssl1320,jzoj(初中)2108-买装备【dfs,水题】
- win 7 mysql 1067_win7系统登陆MySQL服务出现1067错误的解决方法
- 北美KubeCon新风,正把K8S魔力带向边缘计算
- jenkins关闭和重启
- java中== 和 .equals()的区别
- Android的activity的title设定内容
- 查找算法之四 斐波那契查找(C++版本)
- 硅芯片拆解:早期 555 定时器芯片内部一览
- CCF-CSP计算机职业资格认证备考
- 惊闻ci框架要被开发者放弃了 目前正在找下家脱手
- php configure 报错 error: xml2-config not found. Please check your libxml2 installation
- Azure机器学习实验
- Java基础:01Java语言概述(常见的DOS命令,Java语言的特点、核心机制、环境搭建,HelloWorld,注释,Java API 文档)
- linux 那些事儿系列
- 影响淘宝搜索排名因素大全
热门文章
- IOS UI UITableView
- AnalogClock和DigitalClock时间和日期控件
- 2014年自动化的个人感想
- 位运算之左移右移运算之详解
- 小议size_t和size_type
- asp.net web submit链接页面_41. Web 安全之 target=quot;_blankquot; 触发钓鱼风险
- 问题通用解决方法探索
- idea ssm框架 mysql_IDEA 2017 整合SSM框架(使用Maven创建工程)
- openEuler Developer Day 启动大会招募环节,报名通道同步开启!
- 没想到你是这样的Nginx!