2016-12-24 12 views
1

У меня возникла проблема с отправкой пакетов при регистрации канала (Client -> Server). Чтобы проверить, кроме того, если я отправлю пакет после регистрации, я могу отправить пакет. Обратный путь (Сервер -> Клиент) работает совершенно нормально. регистрации функция:Netty - не удается записать на канал при регистрации (событие, зарегистрированное каналом)

@Override 
public void channelRegistered(ChannelHandlerContext ctx) throws Exception { 
    ctx.channel().write(new byte[] {0x00}); 
} 

Он также встречает кодер вниз фильтра цепи:

public class Encoder extends MessageToByteEncoder<byte[]>{ 

@Override 
protected void encode(ChannelHandlerContext ctx, byte[] b, ByteBuf bb) throws Exception { 
    byte[] data = b.getData(); 

    bb.writeInt(data.length); 
    bb.writeBytes(data); 
} 
} 

Сервер поэтому не принимает вышеупомянутый пакет - в результате, я отлажена, чтобы увидеть, если channelRead событие и это не так. (Также мой класс декодирования не декодировал данные)

Любые предположения?

ответ

1

channelRegistered вызывается, когда канал зарегистрирован на его EventLoop. Это не означает, что он готов отправить данные еще, канал еще не открыл сокет. Вы хотите, чтобы channelActive, который вызывается, когда канал активен, то есть готов к отправке и приему данных.

+0

Понятно, я не должен был броситься и прочитать описание API, спасибо за то, что я просветил меня :) – user3385390