socket 封包传输结构体

angeryi angeryi 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
本人在利用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;
}

麻烦各位老大指导指导小弟了
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
angeryi
网络编程 18,356 成员 64,161 内容