关于netty中的UDP服务器设置

时间:2012-12-13 22:15:52

标签: netty

现在我正在实现UDP服务器以使用netty库收集sflow数据报。

这是我对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个字节,这可以通过channelbuffer的大小来检查来自channelbuffer的数据报。 / p>

但是,我使用java.net。*库,如DatagramSocket.class和DatagramPacket.class,它正确接收sflow数据报(大约1300字节)。

有人可以帮助我吗?因此,我无法正确解析sflow数据报。

感谢。

2 个答案:

答案 0 :(得分:0)

我没有对此进行测试,但试一试,可以为你效劳。

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

设置此预测变量工厂后,可能帮助。

答案 1 :(得分:0)

我有同样的问题,尝试使用Oio而不是Nio! (只需将“nio”改为“oio”,将“Nio”改为“Oio”。

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

现在它正在运作;)