2013-03-25 39 views
2

我目前已經建立了一個使用兩個編碼器,一個解碼器和一個ChannelInboundMessageHandlerAdapter<ByteBuf>的網絡客戶端。編碼器是MessageToByteEncoder<Packet>ByteToByteEncoder。我試過使用ChannelOutboundMessageHandlerAdapterChannelOutboundByteHandlerAdapter,但他們都沒有解決這個問題。它進入第一個編碼器(PacketEncoderMessageToByteEncoder<Packet>)就好了,但未能輸入ByteToByteEncoder後綴,也沒有數據發送到服務器。Netty 4 - 編碼器未寫入以下編碼器

我管線設置像這樣:

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); 
    } 
} 

我試圖改變它們的訂單該管道無濟於事。我假設我只是在某個地方失去了一些無意義的東西,但我不確定在哪裏或什麼。任何和所有的幫助,非常感謝。

在此先感謝!

+0

你似乎被寫爲一個字節的字節數,在範圍值爲0,...,127,-128,...,-1。那裏可能會出現問題?溢出> = 128或> = 256。 – 2013-03-25 13:39:37

+0

你說得對,我的意思是改變它,但我寫的原始信息只有6個字節。我現在已經做出改變來反映這個問題。問題依然存在。 – 2013-03-25 13:40:28

回答

0

聽起來很奇怪......你能寫出一個單元測試,顯示問題並在你確定它是一個bug後打開一個問題嗎?

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

+0

那麼,這裏看起來不是什麼問題? – 2013-03-28 14:24:50