0

我需要通过 TCP/IP 从其他 IP(导航设备)接收完整数据包。例如,设备必须定期(超过一分钟)发送 966 个字节。在我的情况下,第一个接收缓冲区的长度为 256 字节(第一个数据包),第二个是 710 字节(最后一个数据包),第三个是完整数据包(966 个字节)。如何手动设置第一个接收缓冲区长度的最小值?

这是我的一段代码:

Executor bossExecutors = Executors.newCachedThreadPool();
Executor workerExecutors = Executors.newCachedThreadPool();
NioServerSocketChannelFactory channelsFactory =
                new NioServerSocketChannelFactory(bossExecutors, workerExecutors);
ServerBootstrap bootstrap = new ServerBootstrap(channelsFactory);
ChannelPipelineFactory pipelineFactory = new NettyServerPipelineFactory(this.HWController);
bootstrap.setPipelineFactory(pipelineFactory);
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.setOption("child.receiveBufferSizePredictorFactory", 
  new FixedReceiveBufferSizePredictorFactory(2048)
);
bootstrap.bind(new InetSocketAddress(this.port));
4

1 回答 1

1

无论receiveBufferSizePredictorFactory您指定什么,您都会看到一条消息被拆分为多个MessageEvents。这是因为 TCP/IP 不是面向消息的协议,而是面向流的协议。请阅读说明如何编写处理此常见问题的正确解码器的用户指南。

于 2011-12-01T07:55:03.540 回答