C++ socket 传输不同类型数据的四种方式

本文介绍通过Socket进行数据传输的四种方法:使用结构体、Json序列化、类对象及protobuf。重点讲解了如何利用结构体进行数据打包和解析,并提供了发送方和接收方的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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

 

转载于:https://www.cnblogs.com/lvchaoshun/p/6535992.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值