如何找出哪些消息导致Netty写入异常?

时间:2017-12-16 09:58:48

标签: java tcp exception-handling netty tcpclient

使用Netty连接到服务器的Java TCP客户端。 在断开连接的通道中写入会导致异常问题导致这一点并不重要,但对我而言,哪些消息未发送并导致异常非常重要。

如何找到它[使用ChannelPromise或ChannelFuture]?

在这里我得到了f.isSuccess()==true',但它没有成功!邮件没有发送!

ChannelPromise promise = c.newPromise();
            promise.addListener(new ChannelFutureListener() {
                @Override
                public void operationComplete(ChannelFuture f) {
                    System.err.println("<TCPIn: promise write operationComplete.");
                    if (!f.isSuccess()) {
                        System.err.println("<TCPIn[writting]: promise write ERROR:");
                        f.cause().printStackTrace();
                        f.channel().close();
                    }
                }
            });
channel.writeAndFlush(buf,promise);

1 个答案:

答案 0 :(得分:1)

不是那么简单。导致异常的原因是无法接收从套接字发送缓冲区传输的段的确认。与特定消息的相关性可以为零。例如,它可能是一条消息的一半而下一条消息的一半,它肯定是来自先前写入的数据而不是刚刚完成的数据。请记住,TCP中的“写入完成”只不过是在套接字发送缓冲区中成功缓冲数据。