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提供了读写函数来将这些数据进行组合成如上的消息体发送或者从网络读取。

  • 相关阅读:
    NS网络仿真,小白起步版,双节点之间的模拟仿真(基于UDP和CBR流)
    Linux学习,ACL权限管理
    SQL中的注释语句
    C#连接SQL Server数据库小贴士
    C#重写ToString
    C#控制台应用程序之选课系统
    浅谈C、C++及其区别、兼容与不兼容
    C++之客户消费积分管理系统
    A*算法
    HTML标签列表总览
  • 原文地址:https://www.cnblogs.com/baizx/p/1782003.html
Copyright © 2011-2022 走看看