netty框架报错 java.io.IOException: 远程主机强迫关闭了一个现有的连接。

不断的推翻,不断的质问,才能最贴近事实


报错信息如下

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:380)
    at io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:288)
    at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1125)
    at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:347)

报错代码如下

netty框架报错 java.io.IOException: 远程主机强迫关闭了一个现有的连接。_第1张图片


解惑

错误的根本原因在于重连机制+没有关闭Channel;

你的根本原因在于对netty框架读写处理器运行原理的不清楚;

 

如果你是长连接的话,并且在channelActive(ChannelHandlerContext ctx)方法里面设置了定时器或者其他执行时间超过2min的代码,最后一个要执行的读或者写处理器执行完没有关闭ctx.close();就会报错

对比一下图,看看自己是哪里没有理解,一般这个错误要么是自己代码有问题,要么是客户端关闭了;

netty框架报错 java.io.IOException: 远程主机强迫关闭了一个现有的连接。_第2张图片


 

你可能感兴趣的:(socket通讯专栏)