网络传输 struct 类型数据
在网络通讯过程中往往涉及一些有关联的参数传递,例如结构体之类的。对于结构体
其实方法挺简单,由于结构体对象在内存中分配的空间都是连续的,所以可以将整个结构
体直接转化成字符串发送,到了接收方再将这个字符串还原成结构体就可以了。
网络传输 struct 数据的约束有两个:
约 束 一 、 就 是 结 构 体 的 大 小 必 须 是 固 定 的 , 不 能 含 有 可 变 大 小 数 据 , 例 如
CString、string 之类的数据。换句话说,结构体所包含的数据必须是 C++基本类型数据以及
这些基本类型数据所形成固定大小的数组。
约束二、就是传接两方结构体定义必须一模一样,包括数据声明次序。如果要发送的
结构体包含“#pragma pack (n)”之类的东西,则接收方在定义此结构体时也要使用“#pragma
pack (n)”声明。传接之所以能够成功是因为结构体数据的内存区域连续性所保证的
本来嘛在 C/C++中所有数据究其本质都是字节类型,只是在表现时各自不同罢了,所
以只要能找到合适的转换为字节类型数据的途径就 OK 了。而字节类型和 char 类型一样都
是一个字节长度,所以问题又等同于找一条合适途径,将信息转换为固定长度 char 数组类
型。
下面举例说明
1、结构体数据全部都是数组
typedef struct _tag_user_info_
{
char cUserID[20];
char cUserSex[10];
char cUserName[18];
char cUserNativePlace[50];
} UserData;
发送方:创建一个对象并初始化各个参数,然后发送。
UserData sendUser;
memcpy ( sendUser.cUserID, "412902198312120311", sizeof("412902198312120311") );
memcpy ( sendUser.cUserSex, "male", sizeof("male") );
memcpy ( sendUser.cUserName, "JianYa.Lee", sizeof("JianYa.Lee") );
评论4