各位高手:
    小弟最近要开发个socket程序,传递的数据包格式定义如下如下:
    头标记(4字节,数据类型:DWORD,固定值:0x0B1C0A1D) +     接口版本号(4字节,数据类型:DWORD,固定值:0x00000001) + 数据长度(4字节,数据类型:DWORD,“应用数据”的字节长度)+ 应用数据(数据类型:CString ,“是一个xml字符串”)请问我的数据包应该如何组成,在发送方应该如何打包发送,在接收方应该如何解包接收。小弟主要是对内存操作不是很熟悉,实在不明白如何将DWORD和CString组合在一起,请各位指教。

解决方案 »

  1.   

    定义数据类型
    typedef struct _packet
    {
         DWORD id;
         DWORD ver;
         DWORD  lenght;
         UCHAR data[1];
    }packet,*ppacket;分配内存及发送
    UCHAR *xmldata;//要发送的数据
    DWORD datalen;//要发送的数据的长度
    ..........
    ppacket packetData;
    packetData=(ppacket)malloc(sizeof(packet)+datalen);
    packetData->id=0x0B1C0A1D;
    packetData->ver=0x01;
    packetData->length=datalen;
    memcpy(ppacketData->data,xmldata,datalen);
    send(s,packetData,sizeof(packet)+datalen,0);
    接收端的处理
    UCHAR recvBuf[MAX_LEN];
    ppacket tpd;recv(s,recvBuf,MAX_LEN,0);//注意这里不能保证一次就能接收你想要的数据;
    tpd=(ppacket)recvBuf;
    tpd->data;/////////处理你的数据