我目前已經建立了一個使用兩個編碼器,一個解碼器和一個ChannelInboundMessageHandlerAdapter<ByteBuf>
的網絡客戶端。編碼器是MessageToByteEncoder<Packet>
和ByteToByteEncoder
。我試過使用ChannelOutboundMessageHandlerAdapter
和ChannelOutboundByteHandlerAdapter
,但他們都沒有解決這個問題。它進入第一個編碼器(PacketEncoder
或MessageToByteEncoder<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,...,127,-128,...,-1。那裏可能會出現問題?溢出> = 128或> = 256。 – 2013-03-25 13:39:37
你說得對,我的意思是改變它,但我寫的原始信息只有6個字節。我現在已經做出改變來反映這個問題。問題依然存在。 – 2013-03-25 13:40:28