2016-11-09 5 views
0

У меня есть Netty Client и Netty Server, и после выполнения основных руководств, чтобы иметь EchoClient/Server, я хотел сделать так, чтобы мой клиент отправил сообщение на мой Сервер, когда он впервые подключится к нему.Отправить сообщение String от моего клиента Netty на мой сервер

Вот методы моих ClientClassHandler о том, что следует позаботиться о том, что:

private final ByteBuf firstMessage; 

    public ClientClassHandler() { 
     firstMessage = Unpooled.buffer(ClientClass.SIZE); 
     for (int i = 0; i < firstMessage.capacity(); i++) { 
      firstMessage.writeByte((byte) i); 
     } 
    } 

    @Override 
    public void channelActive(ChannelHandlerContext ctx) { 
     System.out.println("Channel is active."); 
     ctx.writeAndFlush(firstMessage); 
    } 

Но как вы можете видеть учебник использует ByteBuf и использование String, кажется, не работает!

Вот как я показываю мое полученное сообщение в методе мои ServerClassHandler «ы:

@Override 
public void channelRead(ChannelHandlerContext ctx, Object msg) { 
    System.out.println(msg); 
} 

Но при использовании String для firstMessage и его инициализации в конструкторе и отправить его, мой сервер ничего не отображается!

Что я не понял?

ответ

0

Просто хотят добавить больше информации о струне в Нетти,

вы можете преобразовать объект в Bytebuff

ByteBuf in = (ByteBuf) msg; 
String data = in.toString(CharsetUtil.UTF_8); 

Но если у вас есть длинный объект String, я предлагаю использовать StringEncoder и декодер для netty и LineBasedFrameDecoder и расширяет ваш обработчик до

SimpleChannelInboundHandler<String>