zoukankan      html  css  js  c++  java
  • LengthFieldBasedFrameDecoder的参数lengthAdjustment是什么意思

    lengthAdjustment是DotNetty库 自定义长度帧解码器(LengthFieldBasedFrameDecoder)的参数。

    这里说下所有参数的含义,结合自己项目中包体结构来说明(其实就是自己的理解):

    (1) maxFrameLength - 发送的数据包最大长度;

    (2) lengthFieldOffset - 长度域偏移量,指的是长度域位于整个数据包字节数组中的下标;

    (3) lengthFieldLength - 长度域的自己的字节数长度。

    (4) lengthAdjustment – 长度域的偏移量矫正。 如果长度域的值,除了包含有效数据域的长度外,还包含了其他域(如长度域自身)长度,那么,就需要进行矫正。矫正的值为:包长 - 长度域的值 – 长度域偏移 – 长度域长。

    以我们项目的消息结构体为例:

    /**
    * 解包函数
    * c++的消息体
    * 这是我们项目的消息结构体 typedef struct _packet_client_st { short m_i2Begin; int m_i4DataSize; char m_i1RandSeed; char m_i1CheckSum; int m_i4Compress; short m_i2PacketID; short m_i2Index; char m_szData[0]; _packet_client_st() { memset(this, 0, sizeof(*this)); } }EventClientPacket }

    自己理解:

    长度域是什么意思?长度域就是消息包的数据部分,就是指消息体中的 m_szData。

    lengthFieldOffset:是指 m_i4DataSize 字段从 _packet_client_st 开始偏移的字节数。在这里应该是2,因为 m_i2Begin是short类型,2个字节,所以是2。

    lengthFieldLength:是指 m_szData 数组的长度所占字节数,这里是4,因为 sizeof(m_i4DataSize) 等于4,所以是4。

    lengthAdjustment:是指 m_szData[0] 字段从 _packet_client_st 的 m_i2DataSize 开始偏移的字节数。这里应该是10,因为 sizeof(m_i1RandSeed + m_i1CheckSum + m_i4Compress + m_i2PacketID + m_i2Index) 等于10。所以是10。

    如果有大牛觉得我理解有偏差,请给我留言。

  • 相关阅读:
    Struts2+Spring3+Mybatis3开发环境搭建
    spring+struts2+mybatis
    【LeetCode】Populating Next Right Pointers in Each Node
    【LeetCode】Remove Duplicates from Sorted Array
    【LeetCode】Remove Duplicates from Sorted Array II
    【LeetCode】Binary Tree Inorder Traversal
    【LeetCode】Merge Two Sorted Lists
    【LeetCode】Reverse Integer
    【LeetCode】Same Tree
    【LeetCode】Maximum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/workharder/p/12325908.html
Copyright © 2011-2022 走看看