C++ socket 传输不同类型数据的四种方式
使用socket传输组织好的不同类型数据,有四种不同的方式(我知道的嘿嘿):
a. 结构体
b. Json序列化
c. 类对象
d. protobuf
下面逐一整理一下,方便以后进行项目开发。
1. 使用结构体
假设需要传送的结构体如下:
struct person { char name[20]; // 注意:CPU访问内存的时候,对访问地址有对齐的要求,一般为2的幂次方。所以,有的数据被填充,以满足对齐要求。 int age; float high; };
可在发送数据的地方对数据进行处理,将其转换成一个字符串进行传送,而在接受方定义相同的结构体对这个字符串进行解析即可。
发送方代码:
char temp[100]; //传送的字符串 struct person p1; //声明一个需要传送的结构体 //以下是结构体的初始化信息 p1.age = 10; p1.high = 1.80f; strcpy(p1.name,"zhangsan",sizeof(p1.name)); memset(temp,0,sizeof(temp)); // 对该内存段进行清 memcpy(temp,&p1,sizeof(person)); // 把这个结构体中的信息从内存中读入到字符串temp中 //接下来传送temp这个字符串就可以了 send(sock,temp,sizeof(person),0);
或者
struct person p1; //声明一个需要传送的结构体 p1.age = 10; p1.high = 1.80f; strcpy(p1.name,"zhangsan",sizeof(p1.name)); send(sock,(char*)&p1,sizeof(person),0);
接收方代码:
同样需要定义字符串和相同的结构体对象
char temp[100]; struct person p2; memset(temp, 0, sizeof(temp)); recv(clientSocket, temp, 101, 0); memcpy(&p2,temp,sizeof(person)); //或者 recv(clientSocket, (char*)&p2, sizeof(person),0);
2. 使用Json序列化
有时间写
3. 使用类对象
有时间写
4. protobuf
作者:白菜菜白
出处:http://www.cnblogs.com/lvchaoshun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。