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

请帮忙

4

1 回答 1

1

使用容量是错误的,因为它是缓冲区中的“最大”字节数。同样从位置 0 开始也是错误的,因为 readerIndex 可能位于其他位置。请阅读 ChannelBuffer 的 apidocs,所有这些都非常详细地解释了。

于 2013-03-18T05:42:12.163 回答