代码段。
尝试向与服务器建立的连接写入hello。我假设一旦建立连接就调用channelActive并使用上下文来编写响应。但客户端没有收到任何信息。
public class EchoServerHandler extends ChannelInboundHandlerAdapter {
....
//edit checking status of future
public void channelActive(ChannelHandlerContext ctx) throws Exception {
super.channelActive(ctx);
// ChannelFuture f = ctx.write("hello"); //EDIT2 : cant use String use ByteBuf
ByteBuf msg = Unpooled.copiedBuffer("hello", CharsetUtil.UTF_8);
ctx.write(msg);
if (f.isSuccess()) {
System.out.println("success");
}
else {
System.out.println("failed");
f.cause().printStackTrace(); // EDIT2: Helpful in determining cause of failure
}
if (f.isDone()) {
System.out.println("Done");
}else
{
System.out.println("Not Done");
}
System.out.println("channelActive");
} .....
}
答案 0 :(得分:2)
你不能这样做。通道操作是异步的,除非isDone()返回true,否则isSucess()没有意义。阅读ChannelFuture的文档,如果操作确实失败,请写出失败的cause()
。