一、代码对比
//接收头部代码 - 正确代码
char szRecv[4096] = {};
int nLen = (int)recv(_cSock, szRecv, sizeof(DataHeader), 0);
DataHeader* header = (DataHeader*)szRecv;
//接收头部代码 - 错误代码
DataHeader recvDH;
int nLen = recv(_cSock, (char*)&recvDH, sizeof(recvDH), 0);
//接收数据代码 - 正确代码
recv(_cSock, szRecv + sizeof(DataHeader), header->dataLth - sizeof(DataHeader), 0);
LoginRst* loginrst = (LoginRst*)szRecv;
printf("服务器发送来的登入消息:%d\n", loginrst->rst);
//接收数据代码-错误代码
int ret = recv(_cSock, (char*)(&login + sizeof(DataHeader)), sizeof(Login) - sizeof(DataHeader), 0);
printf("用户姓名:%s 用户密码:%s\n", login.usrName, login.passWord);
二、分析
使用缓存区,没有剥离原有的数据结构,没有使用缓存区导致错误