socket 封包传输结构体

angeryi 2009-07-16 01:38:59
本人在利用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;
}

麻烦各位老大指导指导小弟了
...全文
262 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
angeryi 2009-07-20
  • 打赏
  • 举报
回复
问题已经解决,是由于send的长度原因导致的这个问题。感谢楼上的指导。谢谢
stjay 2009-07-16
  • 打赏
  • 举报
回复
感觉上就是重重复复的复制
如果是CString的话要注意Unicode编码问题

strlen和memcpy不要随便混用

这里是处理字符串的吧

strcpy(serMsg.ser_Name,computername,computername.GetLength());
strcpy(serMsg.ser_Version,systemversion,systemversion.GetLength());

如果memset(serMsg,0,sizeof(serMsg))后,上两句可用memcpy

nSendDataLen=strlen(pSendData);
memcpy(m_Buf+HEADERLEN,pSendData,nSendDataLen);
这里不管了,全部copy过来不行么?而且应该是这样,memcpy(m_Buf+HEADERLEN,pSendData,sizeof(Server_Msg));
不差在这么点时间
#define HEADERLEN sizeof(DataHeader)
#define BUFFER_SIZE (sizeof(DataHeader)+sizeof(Server_Msg))

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧