繁体   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