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

容量の使用は間違っています。これは、バッファ内の「最大」バイト数です。また、readerIndexが他の位置にある可能性があるため、位置0から開始するのは誤りです。このすべてが非常に詳細に説明しているChannelBufferのapidocsを読んでください。

于 2013-03-18T05:42:12.163 に答える