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。

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

  • 相关阅读:
    【Codeforces Round #645 (Div. 2) F】 Tasty Cookie
    【Codeforces Round #645 (Div. 2) E】 Are You Fired?
    【Educational Codeforces Round 88 (Rated for Div. 2) C】 Mixing Water
    20191114-4 Beta发布用户使用报告
    20191114-3 Beta阶段贡献分配
    beta发布
    20191107-1 每周例行报告
    beta 2/2 阶段中间产物提交入口
    beta week 2/2 Scrum立会报告+燃尽图 07
    beta week 2/2 Scrum立会报告+燃尽图 06
  • 原文地址:https://www.cnblogs.com/workharder/p/12325908.html
Copyright © 2011-2022 走看看