【问题标题】:Netty Unable to receive whole packetNetty 无法接收整个数据包
【发布时间】:2019-04-28 00:44:30
【问题描述】:

似乎我无法弄清楚,为什么我将第一个数据包拆分,而我收到的其余数据包则作为一个。

第一个收到的是 IMEI(17 字节),netty 服务器发回 01 响应并开始发送数据包,我用另一个响应响应它们。

但是为什么我总是把第一个数据包分成两部分?而其他人则作为一个发送(没关系)。它总是最多接收 1024 个字节,然后是其余的 251 个字节。整个包最大1275字节..

【问题讨论】:

    标签: java tcp server byte netty


    【解决方案1】:

    一般来说,使用 TCP 时不能保证数据包是否被拆分。所以你不能对此做出任何假设。

    也就是说,您看到的可能是使用 AdaptiveRecvByteBufAllocator(这是默认值)的结果,因为它从较小的分配大小开始,然后在需要时增加这些大小。

    如果你想改变行为,你可以使用不同的RecvByteBufAllocator。但这又不是你可以依赖的。

    【讨论】:

    • 谢谢你的好先生,将.childOption(ChannelOption.RCVBUF_ALLOCATOR, new AdaptiveRecvByteBufAllocator(1024,16*1024,1024*1024)) 添加到 serverboostrap 就可以了。不知道它是做什么的,但它现在适用于我的数据包。
    猜你喜欢
    • 2011-03-30
    • 2018-05-18
    • 2013-11-08
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多