2013-03-17 4 views
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(); 

но когда я получаю bytes- У меня есть cb.capacity() = 256 и сообщение «? 0? 0»System.out.println((char) b);

, пожалуйста, помогите

ответ

1

Использование емкости неверно, это «максимальное» количество байтов в буфере. Также, начиная с позиции 0, неверно, поскольку readerIndex может находиться в другом положении. Пожалуйста, прочитайте apidocs ChannelBuffer, который подробно объясняет это.

Смежные вопросы