Netty:关闭通道时出现ClosedChannelException异常

3

为什么我尝试关闭通道时,会抛出ChannelClosedException异常?使用Channel.close()方法关闭时,异常的堆栈跟踪如下:

java.nio.channels.ClosedChannelException
    at org.jboss.netty.channel.socket.nio.NioWorker.cleanUpWriteBuffer(NioWorker.java:645)
    at org.jboss.netty.channel.socket.nio.NioWorker.close(NioWorker.java:601)
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleAcceptedSocket(NioServerSocketPipelineSink.java:119)
    at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:76)
    at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:60)
    at org.jboss.netty.channel.Channels.close(Channels.java:720)
    at org.jboss.netty.channel.AbstractChannel.close(AbstractChannel.java:200)
    at ru.greencubes.player.PlayerWorkerThread.closeConnection(PlayerWorkerThread.java:107)
    at ru.greencubes.player.PlayerWorkerThread.shutDown(PlayerWorkerThread.java:282)
    at ru.greencubes.player.NetworkPlayerThread.disconnect(NetworkPlayerThread.java:1289)
    at ru.greencubes.player.NetworkPlayerThread.disconnect(NetworkPlayerThread.java:1272)
    at ru.greencubes.server.Server.run(Server.java:1590)
    at ru.greencubes.server.ServerThread.run(ServerThread.java:12)
1个回答

3

我认为你应该忽略这个警告。它只是告诉你当尝试向通道写入剩余字节时,通道已经关闭。所以不用担心。


我遇到了同样的问题。有没有办法确保在关闭通道之前将剩余的字节写入通道?我有类似于 ch.write(msg); ch.close(); 的代码。 - Dennis
使用 ChannelFuture。ch.write(msg).addListener(ChannelFuture.CLOSE); - Norman Maurer
ChannelFuture 中不存在 CLOSE。 - Dennis
抱歉,这是ChannelFutureListener.CLOSE。 - Norman Maurer
看起来我的问题是另一个问题,我们正在这里讨论:https://dev59.com/1F_Va4cB1Zd3GeqPU5ci - Dennis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接