必威体育Betway必威体育官网
当前位置:首页 > IT技术

netty报错:远程主机强迫关闭了一个现有的连接。(已解决)

时间:2019-06-24 02:41:05来源:IT技术作者:seo实验室小编阅读:50次「手机版」
 

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

昨天,java 集成netty服务的项目,在测试服务器上,发现了一个问题:

1.项目netty包版本:netty-all-5.0.0.Alpha1.jar。

2.问题的描述:服务器启动,各种通信正常,运行一段时间,大概10分钟后,这个问题就出现了,并且客户端发送上来的数据,不再收到回写数据,感觉就是被卡死了。

3.错误信息如下:

java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
	at sun.nio.ch.SocketDispatcher.read0(Native Method)
	at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
	at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
	at sun.nio.ch.IOUtil.read(IOUtil.java:192)
	at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379)
	at io.netty.buffer.UnpooledUnsafeDirectByteBuf.setBytes(UnpooledUnsafeDirectByteBuf.java:446)
	at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:871)
	at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:208)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:119)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:485)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:452)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:346)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:794)
	at java.lang.Thread.run(Thread.java:745)

(找了很多博客,都没能解决到问题,但是从各个博文中,我就感觉我代码依然是有问题的。)

直到今天,终于解决了!!!!

最后我是这样解决的(我始终感觉我犯的是一个低级的错误,真的是恨自己。):

1.找到你读取通道数据的方法:public void channelRead(ChannelHandlerContext ctx, Object msg)。

2.检查这个方法中的代码,我这里是由于没有添加ctx.flush()导致出错:

我这里加上后,netty通信正常。

Tips:下面这2个方法,也需要flush()或者close()

	/**
	 * channelReadComplete channel 通道 Read 读取 Complete 完成
	 * 在通道读取完成后会在这个方法里通知,对应可以做刷新操作 ctx.flush()
	 */
	public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
		ctx.flush();
	}

	/**
	 * exceptionCaught exception 异常 Caught 抓住
	 * 抓住异常,当发生异常的时候,可以做一些相应的处理,比如打印日志、关闭链接
	 */
	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
		//super.exceptionCaught(ctx, cause);
		ctx.close();
		log.error("异常信息:", cause);
		System.out.println("异常信息:\r\n" + cause.getMessage());
		
	}

相关阅读

活动案例|剖析小米6在发布前的一个抽奖活动

今天分享一个抽奖活动。平时经常会听到老板说:“你去做个抽奖活动,很简单的”,以后你就可以把这篇文章丢他脸上说:“you can you up!”

如何设计一个好的提醒

如何减少打扰用户的次数甚至不打扰用户,是每一个用户体验设计师应该考虑的事。相信很多设计师都曾纠结于何时用对话框和Toast来做

如何用一个标题引爆微信传播【0基础+超实用】

Nancy导读:如果你正在从事文案编辑工作,如果你正在为文章的推广头疼。那么,我们一起来研究如何做一名优秀的标题党,引爆朋友圈!作为一

Google earth pro无法连接服务器问题

1.注意 Google earth pro已经完全免费,没必要下载破解版2.手工添加hosts域名解析行 以管理员身份打开hosts文件(路径:C:\Windows\S

一个完美的活动策划方案,不能缺少这些元素

希望活动能成为爆款吗?那就要看你的活动策划得有没有意思了。互联网时代,用户的注意力极其分散,你的品牌不出来刷个存在感,刷情怀,很有

分享到:

栏目导航

推荐阅读

热门阅读