繁体   English   中英

Netty 4-编码器未写入后续编码器

[英]Netty 4 - Encoder not writing to following encoder

我目前已经建立了一个网络客户端,该客户端使用两个编码器,一个解码器和一个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);
    }
}

我试图将它们在管道中的顺序更改为无济于事。 我以为我只是在某个地方错过了一些荒谬的东西,但是我不确定在哪里或什么地方。 任何帮助都将不胜感激。

提前致谢!

对我来说听起来很奇怪...您能否编写一个可以显示问题的单元测试,并确定一个错误后再打开一个问题?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM