簡體   English   中英

將字節讀取到Netty服務器

[英]reading bytes to Netty server

public class ServerPipelineFactory implements ChannelPipelineFactory {
    @Override
    public ChannelPipeline getPipeline() throws Exception {
        PacketFrameDecoder decoder = new PacketFrameDecoder();
        PacketFrameEncoder encoder = new PacketFrameEncoder();
        return Channels.pipeline(decoder, encoder, new Handler());
    }
}

和我的解碼器

public class PacketFrameDecoder extends
        ReplayingDecoder<PacketFrameDecoder.DecoderState> {
    public enum DecoderState {
         READ_CONTENT;
    }

    private int length;

    public PacketFrameDecoder() {
        super(DecoderState.READ_CONTENT);
    }

    @Override
    protected Object decode(ChannelHandlerContext chc, Channel chnl,
            ChannelBuffer cb, DecoderState state) throws Exception {
        switch (state) {

        case READ_CONTENT:

             for (int i = 0; i < cb.capacity(); i ++) {
                 byte b = cb.getByte(i);
                 System.out.println((char) b);
             }

            return null;
        default:
            throw new Error("Shouldn't reach here.");
        }
    }
}

我發送消息

Socket fromserver = new Socket("localhost", 7283);
PrintWriter out = new PrintWriter(fromserver.getOutputStream(), true);
int data = 12;
out.write(data);
out.flush();
out.close(); 
fromserver.close();

但是當我得到字節時, 我有cb.capacity()= 256 並顯示消息“?0?0” System.out.println((char) b);

請幫忙

使用容量是錯誤的,因為它是緩沖區中的“最大”字節數。 同樣從位置0開始也是錯誤的,因為readerIndex可能位於其他位置。 請閱讀ChannelBuffer的apidocs,所有這些都將詳細解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM