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服务器:远程主机强迫关闭了一个现有的连接相关推荐

  1. mysql远程主机强迫关闭了_HAProxy出现远程主机强迫关闭了一个现有的连接 的错误及解决...

    使用haproxy作为sql server 的负载均衡器. 使用了文档中的示例配置项: timeout client 50s timeout server 50s 采用这个配置项,有时会出现" ...

  2. java.io.IOException: 远程主机强迫关闭了一个现有的连接

    摆脱烦恼最有效的是慢思考,为什么和我想的不一样,出入在哪里,什么导致的? 疑惑 我使用netty框架接受数据,每隔半个小时存储数据,运行不到三个小时报错 java.io.IOException: 远程 ...

  3. SpringBoot整合Redis:java.io.IOException: 远程主机强迫关闭了一个现有的连接。或者控制台报连接超时异常

    场景: 项目启动过后 Redis 连接过一会就会断开,报如下问题: 问题1: 2022-12-05 23:05:18.287 ERROR 10752 --- [sson-netty-1-11] o.r ...

  4. 关于Redis出现“java.io.IOException: 远程主机强迫关闭了一个现有的连接”的一次排查

    背景 最近在使用springboot(Windows下)连接redis(云服务器)开发时发现一些问题:连接成功的情况下,在一段时间未交互数据后,再次通过连接与Redis传输数据回出现异常java.io ...

  5. c#中udp客户端连接遇到的问题 “远程主机强制关闭了一个现有的连接”

    C# 远程主机强制关闭了一个现有的连接 这个问题是因为我服务端没有打开相应端口去监听,所以必然会报这个错误,问题是如何在服务端不打开端口的情况下发送端不报这个错误,有没有什么方法忽略他. 用try . ...

  6. java.io.IOException: 远程主机强迫关闭了一个现有的连接。

    参考文档: (2条消息) 解决redis中java.io.IOException: 远程主机强迫关闭了一个现有的连接_zeal9s的博客-CSDN博客_redis远程主机强迫关闭了一个现有连接怎么解决 ...

  7. Netty报错 远程主机强迫关闭了一个现有的连接 异常

    百度百科的描述 Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客 ...

  8. sonarqube 启动不了,异常提示:远程主机强迫关闭了一个现有的连接

    启动sonarqube 6.7.1 报下面的错误: 2018.01.24 10:10:56 WARN app[][o.e.t.n.Netty4Transport] exception caught o ...

  9. 远程计算机强迫关闭一个连接,远程主机强迫关闭了一个现有的连接。

    org.apache.catalina.connector.ClientAbortException: java.io.IOException: 远程主机强迫关闭了一个现有的连接. at org.ap ...

最新文章

  1. SA区坏道数据恢复的经历
  2. 下载linux操作系统一般的初始账号密码(虚拟机)
  3. Python基础教程:repr()与str() 的区别
  4. 发送请求_发送soap请求调用wsdl服务
  5. OpenCV使用VideoCapture和VideoWriter的实例(附完整代码)
  6. nssl1320,jzoj(初中)2108-买装备【dfs,水题】
  7. win 7 mysql 1067_win7系统登陆MySQL服务出现1067错误的解决方法
  8. 北美KubeCon新风,正把K8S魔力带向边缘计算
  9. jenkins关闭和重启
  10. java中== 和 .equals()的区别
  11. Android的activity的title设定内容
  12. 查找算法之四 斐波那契查找(C++版本)
  13. 硅芯片拆解:早期 555 定时器芯片内部一览
  14. CCF-CSP计算机职业资格认证备考
  15. 惊闻ci框架要被开发者放弃了 目前正在找下家脱手
  16. php configure 报错 error: xml2-config not found. Please check your libxml2 installation
  17. Azure机器学习实验
  18. Java基础:01Java语言概述(常见的DOS命令,Java语言的特点、核心机制、环境搭建,HelloWorld,注释,Java API 文档)
  19. linux 那些事儿系列
  20. 影响淘宝搜索排名因素大全

热门文章

  1. IOS UI UITableView
  2. AnalogClock和DigitalClock时间和日期控件
  3. 2014年自动化的个人感想
  4. 位运算之左移右移运算之详解
  5. 小议size_t和size_type
  6. asp.net web submit链接页面_41. Web 安全之 target=quot;_blankquot; 触发钓鱼风险
  7. 问题通用解决方法探索
  8. idea ssm框架 mysql_IDEA 2017 整合SSM框架(使用Maven创建工程)
  9. openEuler Developer Day 启动大会招募环节,报名通道同步开启!
  10. 没想到你是这样的Nginx!