我的是这样:
struct TPkgHead
{
uchar headFlag;
uint16 crc16;
uint16 len;
};
struct THead
{
enum{current_version = 1};
uchar ver;
uint16 cmd; // command
}
struct TLogin:public THead
{
TLogin(){cmd = 0x00;} //在ctor初始化命令类型
}
发登录请求:
TLogin login;
...
TPkgHead head;
head.len = sizeof(login); //体长
...
send(&head, sizeof(head));
send(&login, sizeof(login));
收数据,假设收够TPkgHead 大小:
TPkgHead * pPkgHead = (TPkgHead *)sockBuffer;
再从头得到体大小:
int bodyLen = pPkgHead->len;
再收够体大小,
最后:
THead* pHead = (THead*)socketBodyBuffer;//转换体数据成结构
switch(pHead->cmd)
{
case 0x00: //这是登录包了
{
TLogin* pLogin = (TLogin*)pHead;
...登录过程处理
}
struct TPkgHead
{
uchar headFlag;
uint16 crc16;
uint16 len;
};
struct THead
{
enum{current_version = 1};
uchar ver;
uint16 cmd; // command
}
struct TLogin:public THead
{
TLogin(){cmd = 0x00;} //在ctor初始化命令类型
}
发登录请求:
TLogin login;
...
TPkgHead head;
head.len = sizeof(login); //体长
...
send(&head, sizeof(head));
send(&login, sizeof(login));
收数据,假设收够TPkgHead 大小:
TPkgHead * pPkgHead = (TPkgHead *)sockBuffer;
再从头得到体大小:
int bodyLen = pPkgHead->len;
再收够体大小,
最后:
THead* pHead = (THead*)socketBodyBuffer;//转换体数据成结构
switch(pHead->cmd)
{
case 0x00: //这是登录包了
{
TLogin* pLogin = (TLogin*)pHead;
...登录过程处理
}