1

現在、nettyライブラリを使用してsflowデータグラムを収集するUDPサーバーを実装しています。

これがudpサーバーの私の設定です。

ChannelFactory factory = new NioDatagramChannelFactory(this.threadPool.getScheduledExecutor());
    ConnectionlessBootstrap bootstrap = new ConnectionlessBootstrap(factory);
    bootstrap.setPipelineFactory(new ChannelPipelineFactory(){
        public ChannelPipeline getPipeline(){
            ChannelPipeline lChannelPipeline = Channels.pipeline();
            lChannelPipeline.addLast("sflowmessagedecoder", new SflowMessageDecoder());
            lChannelPipeline.addLast("handler", new SflowCollectorHandler());

            return lChannelPipeline;
        }
    });

    bootstrap.setOption("receiveBufferSize", 65536);
    bootstrap.bind(new InetSocketAddress(port));

問題は、sflowデータグラム(長さ約1300バイト、これはwiresharkを使用して確認できます)を受信すると、nettyは約700バイトしか読み取らないことです。これは、チャネルバッファーからのデータグラムのチャネルバッファーのサイズで確認できます。

ただし、DatagramSocket.classやDatagramPacket.classなどのjava.net。*ライブラリを使用すると、sflowデータグラムを正しく受信します(約1300バイト)。

誰かが私を助けることができますか?このため、sflowデータグラムを正しく解析できません。

ありがとう。

4

2 に答える 2

0

同じ問題が発生しました。NioではなくOioを使用してみてください。(「nio」を「oio」に、「Nio」を「Oio」に変更するだけです。

http://lists.jboss.org/pipermail/netty-users/2009-June/000891.html

今それは働いています;)

于 2013-01-15T11:55:20.770 に答える
0

私はこれをテストしていませんが、試してみてください。

org.jboss.netty.channel.FixedReceiveBufferSizePredictorFactory bufferSizePredictor = new FixedReceiveBufferSizePredictorFactory(1300);// or whatever size you require.
serverBootstrap.setOption("receiveBufferSizePredictorFactory",
            bufferSizePredictor);

このプレディクタファクトリを設定すると、役立つ場合があります。

于 2012-12-14T04:25:45.010 に答える