Max Usanin
Max Usanin

Reputation: 2499

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());
    }
}

and my decoder

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.");
        }
    }
}

and I send messages

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

but when I get bytes- I have cb.capacity() = 256 and message "?0?0" System.out.println((char) b);

please help

Upvotes: 0

Views: 169

Answers (1)

Norman Maurer
Norman Maurer

Reputation: 23567

Using capacity is wrong a it is the "max" amount of bytes in the buffer. Also starting at position 0 is wrong as the readerIndex could be on an other position. Please read the apidocs of ChannelBuffer which all of this explains in great detail.

Upvotes: 1

Related Questions