2012-12-13 45 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); 

一旦您設置這個預測工廠它威力幫助。