有两个结构需要一次性在网络上传输,一个为类型,一个为内容,如下:
struct packhead{
                char    c1;
                char    c3;
                int     i2;
        };struct packcontent1{
                char    c1;
                int     i2;
                char    c3;
        };
struct packcontent2{
                char    c1;
                int     i2;
                char    c3;
        };
其中packhead存在每个包中,包的内容可以为packcontent1或packcontent2其中的一个,我在接收到这样的包后,该怎么样解析才能正确读取我所需的数据呢?

解决方案 »

  1.   

    在packheader中加一个标示指明内容是那一个结构
      

  2.   

    建一个缓冲区char buf[需要的大小];
    假设你收到的数据存放在buf中。
    首先取packhead结构数据
    packhead m_head;
    memset(&m_head,0x00,sizeof(packhead));
    memcpy(&m_head,buf,sizeof(packhead));
    然后判断数据类型,假设数据类型标志是存放在packhead结构的i2成员中的。
    if(m_head.i2==1)//下面的数据类型为packcontent1
    {
        packcontent1 pkt1;
        memset(&pkt1,0x00,sizeof(packcontent1));
        //提取packcontent1结构数据
        memcpy(&pkt1,buf+sizeof(packhead),sizeof(packcontent1));
        //处理数据
        //.............
    }
    else if(m_head.i2==2)//下面的数据类型为packcontent2
    {
        packcontent2 pkt2;
        memset(&pkt2,0x00,sizeof(packcontent2));
        //提取packcontent2结构数据
        memcpy(&pkt2,buf+sizeof(packhead),sizeof(packcontent2));
        //处理数据
        //.............
    }