zoukankan      html  css  js  c++  java
  • Qt/E客户端服务期间通信数据串行化

    转载请注明出处:
    http://www.cnblogs.com/baizx/
    Qt是采用C++编写,因此其面向程序员的基本数据结构都是类,而类的数据存储不是连续的,很可能是分散的,因此要在进程之间传递,必须将其串行化,当接收进城收到数据时,在对这些数据进行解析,然后构造可以直接访问的类实例,称之为反串行化。
    负责串行化的类为: QWSProtocolItem

    struct QWSProtocolItem

    {

        QWSProtocolItem(int t, int len, char *ptr) : type(t),

            simpleLen(len), rawLen(-1), deleteRaw(false), simpleDataPtr(ptr),

            rawDataPtr(0), bytesRead(0) { }

        virtual ~QWSProtocolItem();

        // data

        int type;int simpleLen;int rawLen;

        bool deleteRaw;

    ……

        char *simpleDataPtr;char *rawDataPtr;

    int bytesRead;

    void write(QIODevice *s);

        bool read(QIODevice *s);

    };



    Qt服务器客户端通信的消息都继承与该类,可以看到主要数据成员有 type,simpleLen,simpleDAtaPtr,另外还有rawDataPtr,我们就暂时不分析了,因为和simpleDataPtr处理起来是一样的。
    要通过网络发送的数据必须是一个字节序列,并且要有长度,这个很自然。type是一个最关键的数据,有了type,就可以知道这是什么消息,这样才能进行解析。从网络上发送的消息体结构如下:
                  
    其中 RawData部分大部分情况下都不使用,只有SimpleData部分。QWSProtocolItem提供了读写函数来将这些数据进行组合成如上的消息体发送或者从网络读取。

  • 相关阅读:
    leetcode刷题37
    leetcode刷题36
    leetcode刷题38
    leetcode刷题35
    leetcode刷题34
    leetcode刷题33
    记一次Unity使用XNode插件时自动连线问题
    Unity中UGUI图片跟随文本自适应
    Unity中多个物体交换位置
    使用VSCode编译C
  • 原文地址:https://www.cnblogs.com/baizx/p/1782003.html
Copyright © 2011-2022 走看看