使用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);
答案 0 :(得分:1)
不是那么简单。导致异常的原因是无法接收从套接字发送缓冲区传输的段的确认。与特定消息的相关性可以为零。例如,它可能是一条消息的一半而下一条消息的一半,它肯定是来自先前写入的数据而不是刚刚完成的数据。请记住,TCP中的“写入完成”只不过是在套接字发送缓冲区中成功缓冲数据。