网络传输struct类型数据.docx

网络传输struct类型数据.docx

ID:51713905

大小:38.20 KB

页数:5页

时间:2020-03-15

网络传输struct类型数据.docx_第1页
网络传输struct类型数据.docx_第2页
网络传输struct类型数据.docx_第3页
网络传输struct类型数据.docx_第4页
网络传输struct类型数据.docx_第5页
资源描述:

《网络传输struct类型数据.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、网络传输struct类型数据在网络通讯过程中往往涉及一些有关联的参数传递,例如结构体之类的。对于结构体其实方法挺简单,由于结构体对象在内存中分配的空间都是连续的,所以可以将整个结构体直接转化成字符串发送,到了接收方再将这个字符串还原成结构体就可以了。网络传输struct数据的约束有两个:约束一、就是结构体的大小必须是固定的,不能含有可变大小数据,例如CString、string之类的数据。换句话说,结构体所包含的数据必须是C++基本类型数据以及这些基本类型数据所形成固定大小的数组。约束二、就是传接两方结构体定义必须一模一样,包括数据声明次序。如果要发送的

2、结构体包含“#pragmapack(n)”之类的东西,则接收方在定义此结构体时也要使用“#pragmapack(n)”声明。传接之所以能够成功是因为结构体数据的内存区域连续性所保证的本来嘛在C/C++中所有数据究其本质都是字节类型,只是在表现时各自不同罢了,所以只要能找到合适的转换为字节类型数据的途径就OK了。而字节类型和char类型一样都是一个字节长度,所以问题又等同于找一条合适途径,将信息转换为固定长度char数组类型。下面举例说明1、结构体数据全部都是数组typedefstruct_tag_user_info_{charcUserID[20];ch

3、arcUserSex[10];charcUserName[18];charcUserNativePlace[50];}UserData;  发送方:创建一个对象并初始化各个参数,然后发送。UserDatasendUser;memcpy(sendUser.cUserID,"412902198312120311",sizeof("412902198312120311"));memcpy(sendUser.cUserSex,"male",sizeof("male"));memcpy(sendUser.cUserName,"JianYa.Lee",sizeof(

4、"JianYa.Lee"));memcpy(sendUser.cUserNativePlace,"Asia.P.R.C.HeNan-DengZhouShi",sizeof("Asia.P.R.C.HeNan-DengZhouShi"));send(m_oSendSocket,(char*)&sendUser,sizeof(UserData),0);需要注意的地方:send函数的第三个参数,也就是发送数据长度必需是结构体的大小。  这样发送方就已经将这个sendUser对象以字符串的形式发送出去了,剩下的工作就由接收方来完成了  接收方:首先也必须有Use

5、rData这个结构体类型定义。其次,首先定义一个充分大char类型数组,用于接收网络发送数据。然后将接收到的数据用memcpy函数完成强转即可。//定义的char数组足够大charcRcvBuffer[1024]={0};//定义一个UserData对象,用于容纳转换信息UserDatarecvUser;recv(m_RcvSocket,cRcvBuffer,sizeof(cRcvBuffer),0);//强转,请注意sizeof的内容memcpy(&recvUser,cRcvBuffer,sizeof(UserData));  这样得到的recvUse

6、r对象里的数据与sendUser相同了。2、结构体数据没有包含数组发送方:创建struct结构体typedefstruct_tag_other_data_{INT32nValue;charcValue;boolblValue;floatfValue;doubledValue;shortsValue;}SecondData;定义结构体对象,并初始化SecondDataoScdData;//初始化数据内容oScdData.blValue=true;oScdData.cValue='h';oScdData.dValue=0.1234567;oScdData.f

7、Value=3.14159f;oScdData.nValue=123456;oScdData.sValue=0x1024;//注意sizeof内容send(m_oSendSocket,(char*)&oScdData,sizeof(SecondData),0);接收方:首先定义SecondData结构体,数据类型、声明次序需完全一样;其次声明一个足够大的char类型数组;最后强转。//定义char类型数组charcRcvBuffer[1024]={0};SecondDataoRcvData;//注意sizeof内容recv(m_oRcvSocket,cR

8、cvBuffer,sizeof(cRcvBuffer),0);//强制转换,注意

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。