2

コードスニペット。

サーバーへの接続に 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");
}    .....
}
4

1 に答える 1

2

そんなことはできません。チャネル操作は非同期です。isDone() が true を返さない限り、isSucess() は意味がありません。ChannelFutureのドキュメントを読み、操作が実際に失敗した場合は、失敗を書き出しますcause()

于 2013-07-08T21:17:42.153 に答える