2012-12-13 43 views
1

现在我正在实现UDP服务器来使用netty库收集sflow数据报。关于netty中的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选中),网状只读取大约700字节,这可以通过ChannelBuffer类型的大小从待检查的数据报的,频道缓冲器。

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

有人可以帮助我吗?由于这个原因,我无法正确解析sflow数据报。

谢谢。

回答

0

我还没有测试过,但试试看,可以为你工作。

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

一旦您设置这个预测工厂它威力帮助。