typedef struct _head 

char type 
unsigned short len; 
}hdr, *phdr; //数据包中的数据结构 
typedef struct _data 

char buf[MAX_NUM_BUF];//数据 
}DATABUF, *pDataBuf; DATABUF m_data;void CClient::HandleData(const char* pExpr)   {         memset(m_data.buf, 0, MAX_NUM_BUF);//清空m_data             //如果是“byebye”或者“Byebye”         if (BYEBYE == ((phdr)pExpr)->type)         {                  EnterCriticalSection(&m_cs);                   phdr pHeaderSend = (phdr)m_data.buf;                               //发送的数据                   pHeaderSend->type = BYEBYE;                                             //单词类型                   pHeaderSend->len = HEADERLEN + strlen("OK");            //数据包长度                   memcpy(m_data.buf + HEADERLEN, "OK", strlen("OK"));         //复制数据到m_data"             红色标记的代码如何理解,这里不是把m_data.buf已经转化成 phdr类型了,已经知道了数据类型和数据包的长度,为什么这里还要加上HEADERLEN呢?希望哪位大侠能详细介绍一下红色标记代码,在这里如何来理解,非常感谢。

解决方案 »

  1.   

    phdr pHeaderSend = (phdr)m_data.buf;                              //发送的数据 
    这转完是什么样?哎,好久没好好看C++了
    不知道是否正确,也不知道是否有给unsigned short len值
      

  2.   

    memcpy(m_data.buf + HEADERLEN, "OK", strlen("OK")); m_data.buf,包含了包头包体,包头部分已经填充过了,这句只是用ok填充包头后面的包体部分
    指向包体的指针位置=指向包头指针+包头长度。