现在我正在实现 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的数据报。
但是,我使用 java.net.* 库,如 DatagramSocket.class 和 DatagramPacket.class,它正确接收 sflow 数据报(大约 1300 字节)。
有人可以帮助我吗?因此,我无法正确解析 sflow 数据报。
谢谢。