Теперь я внедряю UDP-сервер для сбора дейтаграмм sflow с использованием библиотеки netty.
Вот мои настройки для 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 байт, это можно проверить по размеру буфера канала, дейтаграммы из буфера канала.
Однако я использую библиотеки java.net. *, такие как DatagramSocket.class и DatagramPacket.class, он правильно получает дейтаграмму sflow (около 1300 байт).
Кто-нибудь может мне помочь? Из-за этого я не могу правильно разобрать дейтаграмму sflow.
Спасибо.