Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Netty只给我768字节的UDP消息_Java_Udp_Netty_Datagram - Fatal编程技术网

Java 为什么Netty只给我768字节的UDP消息

Java 为什么Netty只给我768字节的UDP消息,java,udp,netty,datagram,Java,Udp,Netty,Datagram,我已经将“receiveBufferSize”选项设置为1024,但由于某些原因,我仍然只能获得768字节的messageReceived。数据的标题指示正在发送的数据的大小为1004 以下是服务器的初始化代码: public static void main(String[] args) throws Exception { ConnectionlessBootstrap b = new ConnectionlessBootstrap(new NioDatagramChannelFac

我已经将“receiveBufferSize”选项设置为1024,但由于某些原因,我仍然只能获得768字节的messageReceived。数据的标题指示正在发送的数据的大小为1004

以下是服务器的初始化代码:

public static void main(String[] args) throws Exception {
    ConnectionlessBootstrap b = new ConnectionlessBootstrap(new NioDatagramChannelFactory());

    // Options for a new channel        
    b.setOption("receiveBufferSize", 1024);
    System.out.println(b.getOptions());

    b.setPipelineFactory(new ChannelPipelineFactory() {

        @Override
        public ChannelPipeline getPipeline() throws Exception {
            return Channels.pipeline(
                    new MyUDPPacketDecoder(),
                    new StdOutPrintHandler());
        }
    });

    b.bind(new InetSocketAddress(myPort));
}

您需要设置一个附加选项-receiveBufferSizePredictorFactory

为了预测需要分配多少空间来保存传入消息,netty使用一个预测器来预测要分配的字节量

有两种类型的接收缓冲区大小预测器,自适应和固定大小。 预测器由预测器工厂创建,该工厂为引导创建的每个通道创建一个预测器

如果没有为引导设置预测器工厂(或没有为通道手动设置预测器),通道将使用默认的768字节固定大小预测器。所有大于768字节的消息都会被缩减到该大小

您可以添加:

b.setOption("receiveBufferSizePredictorFactory", new FixedReceiveBufferSizePredictorFactory(1024));
您可以在netty文档中阅读有关预测值及其工厂的信息


您能否为默认预测值768字节固定大小预测值添加一个引用?。查看setReceiveBufferSizePredictor(ReceiveBufferSizePredictor)'默认预测值为FixedReceiveBufferSizePredictor(768)