Netty 4 - 编码器不写入以下编码器

时间:2013-03-25 13:32:27

标签: java networking netty

我目前已经建立了一个联网客户端,它使用两个编码器,一个解码器和一个ChannelInboundMessageHandlerAdapter<ByteBuf>。编码器是MessageToByteEncoder<Packet>ByteToByteEncoder。我尝试过使用ChannelOutboundMessageHandlerAdapterChannelOutboundByteHandlerAdapter,但都没有解决问题。它进入第一个编码器(PacketEncoderMessageToByteEncoder<Packet>)就好了,但没有输入ByteToByteEncoder后记,也没有数据发送到服务器。

我的管道设置如下:

ChannelPipeline pipeline = ch.pipeline();
// Decoders
pipeline.addLast("buffer_length_decoder", new BufferLengthDecoder());
pipeline.addLast("packet_decoder", new PacketDecoder());

// Encoder
pipeline.addLast("buffer_length_encoder", new BufferLengthEncoder());
pipeline.addLast("packet_encoder", new PacketEncoder());

PacketEncoder看起来像这样:

public class PacketEncoder extends MessageToByteEncoder<Packet> {
    private static final Logger logger = LoggerFactory.getLogger(PacketEncoder.class);

    @Override
    protected void encode(ChannelHandlerContext ctx, Packet msg, ByteBuf out) throws Exception {
        ByteBuf buf = msg.buf();
        buf = buf.capacity(buf.readableBytes());
        logger.info(Utils.toHexString(buf.array()));
        out.writeBytes(buf);
    }
}

BufferLengthEncoder看起来像这样:

public class BufferLengthEncoder extends ByteToByteEncoder {
    private static final Logger logger = LoggerFactory.getLogger(BufferLengthEncoder.class);

    @Override
    protected void encode(ChannelHandlerContext ctx, ByteBuf in, ByteBuf out) throws Exception {
        logger.info(Utils.toHexString(in.array()));
        out = out.writeInt(in.readableBytes()).writeBytes(in);
    }
}

我试过改变他们在管道中的订单无济于事。我认为我只是遗漏某些荒谬的东西,但我不确定在哪里或者什么。非常感谢任何和所有帮助。

提前致谢!

1 个答案:

答案 0 :(得分:0)

对我来说听起来很奇怪...你能不能写一个单元测试来显示问题,并在你确定它是一个bug之后打开一个问题?

https://github.com/netty/netty/issues