socket 封包传输结构体
本人在利用socket 封包传输数据内容的时候,包头为一结构体,接收方能正常接收包头,如果包体只是为数据内容而非结构体的时候,接收方也能正常接收该数据内容.
但是当包体为一结构体的时候,接收方不能正常接收包体内容.相关代码如下:
希望那位老大能帮帮小弟,谢谢
#define HEADERLEN sizeof(DataHeader) //包头长度
//包头
typedef struct header
{
u_short usType; //数据类型
u_short usLen; //数据长度
}DataHeader,*PDataHeader;
typedef struct _SERVER_MSG
{
char ser_Name[1024];
char ser_Version[1024];
}Server_Msg,*PServer_Msg;
Server_Msg serMsg;
BOOL SendPacket(PDataHeader pDHeader,char *pSendData); //发送数据包
CString computername,systemversion;
......
memcpy(serMsg.ser_Name,computername.GetBuffer(computername.GetLength()),computername.GetLength());
memcpy(serMsg.ser_Version,systemversion.GetBuffer(systemversion.GetLength()),systemversion.GetLength());
DataHeader dhr;
//定义包头内容
dhr.usType=SERVER_MESSAGE;
dhr.usLen=sizeof(serMsg);
SendPacket(&dhr,(char*)&serMsg);
//发送数据包函数
BOOL SendPacket(PDataHeader pDHeader,char *pSendData)
{
int nRet;
char m_Buf[BUFFER_SIZE]; //缓冲区
ZeroMemory(m_Buf,BUFFER_SIZE); //清除缓冲区
//包头
memcpy(m_Buf,(char*)pDHeader,HEADERLEN); //拷贝包头
//包体
//拷贝数据
if (pSendData!=NULL)
{
int nSendDataLen;
nSendDataLen=strlen(pSendData);
memcpy(m_Buf+HEADERLEN,pSendData,nSendDataLen); //数据
}
//发送数据
nRet=send(tcsocket,m_Buf,HEADERLEN+pDHeader->usLen,0);
if (nRet==SOCKET_ERROR)
{
MessageBox(NULL,"SendPacket发送数据包失败","",MB_OK);
return FALSE;
}
return TRUE;
}
麻烦各位老大指导指导小弟了