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;
}
麻烦各位老大指导指导小弟了
但是当包体为一结构体的时候,接收方不能正常接收包体内容.相关代码如下:
希望那位老大能帮帮小弟,谢谢
#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;
}
麻烦各位老大指导指导小弟了
...全文
相关推荐
易语言-易语言网络封包类模块
易语言网络封包类模块源码例程程序演示了网络封包的实现结构。 三叶易语言自学网
易语言Socket模式网关源码-易语言
易语言Socket模式网关源码
VC 源码 关于封包 截包 的!编译可用!
VC 源码 关于封包 截包 的!编译可用!
谈起socket编程,大家也许会想起QQ和IE,没错。
谈起socket编程,大家也许会想起QQ和IE,没错。还有许多网络工具如P2P、NetMeeting等在应用层实现的应用程序,也是用socket来实现的。Socket是一个网络编程接口,实现于网络应用层,Windows Socket包括了一套系统组件,充分利用了Microsoft Windows 消息驱动的特点。Socket规范1.1版是在1993年1月发行的,并广泛用于此后出现的Windows9x操作系统中。Socket规范2.2版(其在Windows平台上的版本是Winsock2.2,也叫Winsock2)在 1996 年 5 月发行,Windows NT 5.0及以后版本的Windows系统支持Winsock2,在Winsock2中,支持多个传输协议的原始套接字,重叠I/O模型、服务质量控制等。
socket传输结构体的解决办法
socket传输结构体的解决办法,一般的socket只能传输字符串,怎么解决这个问题呢?看看这个吧


网络编程
