2016-12-24 8 views
1

チャネル登録時にパケットを送信する際に問題が発生しました(クライアント - >サーバ)。 さらに、登録後にパケットを送信すると、パケットを送信することが許可されます。 逆の方法(サーバー - >クライアント)は全く問題なく動作します。 登録機能:Netty - 登録時にチャネルに書き込めません(channelRegisteredイベント)

@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

関連する問題