2016-12-24 122 views
1

我遇到了在頻道註冊(客戶端 - >服務器)上發送數據包的問題。 進一步測試,如果我在註冊後發送數據包,我可以發送數據包。 相反的方式(服務器 - >客戶端)完全正常。 註冊功能:Netty - 無法在註冊時寫入頻道(channelRegistered event)

@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