4

Netty 4.0.0 バイナリを使用して、UDP チャネル経由でオブジェクト (Pojo) をブロードキャストする必要があります。
Netty 4.0.0 では、DatagramPacket クラスのみを使用して UDP パケットを送信できます。
このクラスは、引数として ByteBuf のみを受け入れます。

他に UDP チャネル経由で Pojo を送信する方法はありますか?

さらに明確にするために、次のようにしていました。

UDP チャネルの設定を初期化しています

ConnectionlessBootstrap udpBootstrap;
udpBootstrap.setPipelineFactory(new ChannelPipelineFactory() {
            public ChannelPipeline getPipeline() throws Exception {
                return Channels.pipeline(
                        new ObjectEncoder(),
                        new ObjectDecoder(new NettyElementInfo()),
                        new UDPBroadcastHandler());
            }
        });
        udpBootstrap.setOption("broadcast", true);
        //datagramChannel = (DatagramChannel) udpBootstrap.bind(new InetSocketAddress(udp_port));
        datagramChannel = (DatagramChannel) udpBootstrap.bind(new InetSocketAddress(0));

ここで、NettyElementInfo は Serializable および ClassResolver インターフェイスを実装します。この pojo を次のようにブロードキャストしようとしました。

channel.write(new NettyElementInfo(), 
                new InetSocketAddress("255.255.255.255", 9555));

受信側では、初期化部分について上記と同じことを行っていましたが、ハンドラーでは次のように Pojo を取得していました。

NettyElementInfo elementInfo = (NettyElementInfo)e.getMessage();

これは netty 3.5.x を使用して正常に実行されました

Netty 4.0.0 を使用してこのシナリオを再現する方法。サンプルコードを提供してください。

4

2 に答える 2

2

DatagramPacketをByteBufにエンコード/デコードするMessageToMessageDecoder/MessageToMessageEncoderを使用できると思います。これは、実際には、デコードのためにDatagramPacket.content()を呼び出すだけです(例として)。エンコーダー/デコーダーの後に、ByteBufのデコードを処理する通常の他のChannelHandlerをPojoに追加できます。

于 2012-10-04T05:10:04.250 に答える