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

原文地址:https://www.cnblogs.com/baizx/p/1782003.html