Java NIO服务器:远程主机强迫关闭了一个现有的连接

记一次 IOException: 远程主机强迫关闭了一个现有的连接 这篇文章知识点总结还是要写前面的, 直接省时好吧对于response的操作下载文件:java复制代码// 指定文件下载名// 指定长度, 推荐file.length()方法, inputStream.available()方法获取网络流不一定准确在线预览java复制代码// 指定播放格式, 代码中为 mp3播放java复制代码// 可以尝试下述代码, 理由: 2.2版本以上HttpURLConnection跟服务交互采用了"gzip"压缩。 阅读详情

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);
						}
这样改良之后的聊天室服务端,客户端异常强制关闭后,服务器便会妥善处理了,也不会报错,更不会停止运行。改良之后还算比较稳定运行的。

【异常】spring-boot-starter-data-elasticsearch 解决远程主机强迫关闭了一个现有的连接。 在SpringBoot项目中,采用spring-boot-starter-data-elasticsearch对ElasticSearch进行操作。 阅读详情

相关推荐

【Furion性能平台】远程运行jmx失败问题

JMeter远程执行.jmx脚本时出现"rmi_keystore.jks缺失"错误。排查发现slave服务正常,生成密钥后问题仍存在。通过修改主从设备的jmeter.properties文件,将server.rmi.ssl.disable设为true关闭SSL功能后问题解决。关键步骤包括:检查服务状态、尝试生成密钥、最终禁用SSL实现远程执行

sysu_lluozh 1050

java.io.IOException: 远程主机强迫关闭了一个现有的连接。 at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[na:1.8...

这是一条 Java 程序在运行时抛出的异常信息。具体来说,这个异常表示在程序运行过程中,与另一台计算机之间的网络连接被强制关闭了。这可能是由于计算机之间的网络连接出现了问题,或者由于另一台计算机关闭了连接。 要解决这个问题,需要检查网络连接是否正常,并确保与另一台计算机之间的连接没有被中断。如果问题依旧存在,则可能需要重新启动程序或者检查代码,以确保程序能够正常处理网络连接中断的情况。 ...

weixin_35753431的博客 5009

【计算摄影】相机成像原理:从光到JPEG图像

本文我们将从最基本的相机成像原理开始论述,再讨论光线进入相机后,经过一系列处理成为JPEG图像的大致流程。

qq_35149975的博客 2万+

Spring Boot整合Redis报错:java.io.IOException: 远程主机强迫关闭了一个现有的连接

他的原话: 大于Redis服务器配置的 tcp-keepalive 存活时间(比如60)就行,你想吧,超时100>60符合正常逻辑,如果超时关闭时长

ManGooo0的博客 1万+

Synopsys AXI VIP 从环境搭建到首个验证场景运行

本文详细介绍了Synopsys AXI VIP从环境搭建到首个验证场景运行的全过程,包括VIP安装、示例工程生成、验证环境解析、仿真调试技巧及进阶优化。特别针对AXI协议验证中的常见问题提供了实用解决方案,帮助工程师快速掌握这一SoC验证必备工具。

weixin_29185493的博客 343

电机控制-PMSM无感FOC控制(五)SVPWM过调制策略优化与谐波抑制

本文深入探讨了PMSM无感FOC控制中的SVPWM过调制策略优化与谐波抑制。针对电机高速运行时电压利用率不足的问题,分析了过调制技术的必要性,并详细阐述了分区过调制、谐波注入及闭环优化等主流策略,旨在提升电压利用率与抑制电流谐波,实现电机高性能控制。

convnet3designer的博客 353

java nio 强制关闭_Java NIO服务器:远程主机强迫关闭了一个现有的连接

Java NIO聊天室 中,若客户端强制关闭,服务器会报“java.io.IOException: 远程主机强迫关闭了一个现有的连接。”,并且服务器会在报错后停止运行,错误的意思就是客户端关闭了,但是服务器还在从这个套接字通道读取数据,便抛出IOException,导致这种情况出现的原因就是,客户端异常关闭后,服务器的选择器会获取到与客户端套接字对应的套接字通道SelectionKey,并且这个k...

weixin_42570769的博客 579

AIGC游戏本地化:用AI实现多语言自动翻译

游戏本地化是游戏全球化战略的关键环节,传统人工翻译方式成本高、周期长。本文旨在探讨如何利用AIGC技术实现高效、准确、低成本的游戏多语言自动翻译解决方案。我们将覆盖从文本翻译到语音合成的完整本地化流程,重点关注AI技术在游戏特定语境下的应用优化。文章首先介绍游戏本地化的核心挑战和AI解决方案,然后深入讲解关键技术原理,接着通过实战项目演示具体实现,最后讨论应用场景和未来趋势。AIGC:人工智能生成内容,指利用AI技术自动生成文本、图像、音频等内容本地化(Localization)

AI 领航者的博客 1339

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

如题,这是我的代码,请大侠们帮忙看看: public class ChannelClient { private SocketChannel socketChannel; private static String HOST; private static int PORT ; private Selector selector = null; // private I...

houbin001的博客 4091

5、数据库基础概念与数据建模全解析

本文深入解析了数据库的基础概念,包括函数依赖、决定因素和多值依赖等关键依赖关系,同时探讨了数据建模的重要方法论,如IDEF1X、信息工程和陈方法。此外,还介绍了SQL Server管理工作室的图表功能,帮助用户进行数据库的可视化设计。通过本文,读者将掌握数据库设计的核心知识,为构建高效、可扩展的数据库系统奠定基础。

81

COSMO-RS理论:流体相热力学预测的核心模型与技术突破

摘要:COSMO-RS模型通过量子化学计算分子表面电荷分布,实现了从微观量子尺度到宏观化工过程的热力学预测。该模型基于介电连续介质理论,将分子表面片段化处理,通过σ-剖面描述电荷分布,并计算片段间的静电失配能和氢键能。其核心算法通过自洽化学势方程求解活度系数,克服了传统模型依赖实验参数的局限。随着技术进步,模型引入了高阶描述符和色散力修正,提升了预测精度。在药物研发、化工分离等领域广泛应用,但仍存在对长程有序结构预测不足等局限性。该模型为复杂体系的热力学性质预测提供了重要理论工具。

ASKCOS博客 974

tcp nio 远程主机强迫关闭了一个现有的连接

import java.io.IOException;import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.channels.Select...

weixin_33788244的博客 283

【数据集】CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

CAMS 全球生物质燃烧排放 GFAS(基于火灾辐射功率)

WW、forever的博客 402

TCP protocol

对于以下异常的记录: java.io.IOException: 远程主机强迫关闭了一个现有的连接。 at sun.nio.ch.SocketDispatcher.read0(Native Method) at sun.nio.ch.SocketDispatcher.read(Unknown Source) at sun.nio.ch.IOUtil.readIntoNativeBuffer(

buzhidaolvtu的博客 1789

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

nio 远程主机强迫关闭了一个现有的连接 解决方案

nio编程过程中会出现: Exception in thread "main" java.io.IOException: 远程主机强迫关闭了一个现有的连接。 at sun.nio.ch.SocketDispatcher.read0(Native Method) at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25) ...

j2ee的学习 2197

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NIO编程中,报“远程主机强迫关闭了一个现有的连接”IOException

JavaNIO聊天室 中,若客户端强制关闭,服务器会报“Java.io.IOException: 远程主机强迫关闭了一个现有的连接。”,并且服务器会在报错后停止运行,错误的意思就是客户端关闭了,但是服务器还在从这个套接字通道读取数据,便抛出IOException,导致这种情况出现的原因就是,客户端异常关闭后,服务器的选择器会获取到与客户端套接字对应的套接字通道SelectionKey,并且这个k...

Janson_lin88的博客 924

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Netty学习4—NIO服务端报错:远程主机强迫关闭了一个现有的连接

1 发现问题 NIO编程中服务端会出现报错 Exception in thread "main" java.io.IOException: 远程主机强迫关闭了一个现有的连接。 at sun.nio.ch.SocketDispatcher.read0(Native Method) at sun.nio.ch.SocketDispatcher.re...

weixin_33827731的博客 3060

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

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

学英语的程序员 2830
上一篇: Java NIO实战之聊天室
下一篇: Java NIO笔记(一):NIO介绍
xlight2023
博客等级 码龄15年 236粉丝 32原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值