現在我正在實現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數據報。
謝謝。