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

C++ socket 传输不同类型数据的四种方式的更多相关文章

  1. EF5+MVC4系列(7) 后台SelectListItem传值给前台显示Select下拉框;后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式(ViewDate,TempDate,ViewBag,Model (实际是ViewDate.Model传值))

    一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Ord ...

  2. .NET MVC控制器向视图传递数据的四种方式

    .NET MVC控制器向视图传递数据的四种方式: 1.ViewBag  ViewBag.Mvc="mvc"; 2.ViewData ViewBag["Mvc"] ...

  3. springMVC返回数据的四种方式

    转自:https://blog.csdn.net/itcats_cn/article/details/82119673 springMVC返回数据的四种方式:第一种,通过request.setAttr ...

  4. spring mvc 返回json数据的四种方式

    一.返回ModelAndView,其中包含map集 /* * 返回ModelAndView类型的结果 * 检查用户名的合法性,如果用户已经存在,返回false,否则返回true(返回json数据,格式 ...

  5. post提交数据的四种编码方式

    这里总结下post提交数据的四种方式. 参考文章: https://www.jianshu.com/p/3c3157669b64

  6. Webform中Repeater控件--绑定嵌入C#代码四种方式

    网页里面嵌入C#代码用的是<% %>,嵌入php代码<?php ?> 绑定数据的四种方式: 1.直接绑定 <%#Eval("Code") %> ...

  7. 实现web数据同步的四种方式

    http://www.admin10000.com/document/6067.html 实现web数据同步的四种方式 1.nfs实现web数据共享 2.rsync +inotify实现web数据同步 ...

  8. POST提交数据时四种常见的数据格式

    最近项目部署到新环境tomcat+mysql,想看看项目部署成功没有,就用soupui调对应接口开测试,soupui使用比较简单,给上接口地址,入参xml报文,把入参的media Type设置为app ...

  9. linux下实现web数据同步的四种方式(性能比较)

    实现web数据同步的四种方式 ======================================= 1.nfs实现web数据共享2.rsync +inotify实现web数据同步3.rsyn ...

随机推荐

  1. day26 多继承

    class A(object): def test(self): print('from A') class B(A): def test(self): print('from B') class C ...

  2. Twitter数据挖掘:如何使用Python分析大数据

    我们可以创建变量来存放待拉取的微博数量(即count),以及待拉取的用户(即name).然后用这两个参数调用user_timeline()函数.下面是更新后的代码(注意,在代码的顶部应该保持认证和AP ...

  3. 自学Linux Shell7.2-linux文件权限

    点击返回 自学Linux命令行与Shell脚本之路 7.2-linux文件权限 在linux中每个文件有所有者.所在组.其它组的概念 所有者一般为文件的创建者,谁创建了该文件,就天然的成为该文件的所有 ...

  4. Java XML JSON 数据解析

    下面我们通过一段代码了解一下解析JSON格式数据的基本过程: 提示:使用JSON需要导入 JSON 相关的多个Jar文件 import net.sf.json.JSONObject; public c ...

  5. [poj2528]Mayor's posters

    题目描述 The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campa ...

  6. docker安装Zabbix

    1. 先安装数据库mysqldocker run --name zabbix-mysql-server --hostname zabbix-mysql-server \-e MYSQL_ROOT_PA ...

  7. luogu4933 大师 (dp)

    记f[i][j]是以i号为结尾的.公差为j的的个数(不包括只有i的情况) 那么就有$f[i][i-i']=\sum{(f[i'][i-i']+1)}$之类的东西 最后再加个n就行啦 而且公差有可能有负 ...

  8. WCF快速搭建Demo

    WCF快速搭建Demo ps:本Demo只是演示如何快速建立WCF 1.首先完成IBLL.BLL.Model层的搭建,由于数据访问层不是重点,WCF搭建才是主要内容,所以本Demo略去数据访问层. 新 ...

  9. Java:在不同界面样式下JPopupMenu与鼠标事件mousePressed表现的结果不同!

    今天遇到一个郁闷的事儿: 在一个JFrame上放了一个JList元件,这个JList元件添加了鼠标事件: mouseReleased.mousePressed ... 其中,在mouseRelease ...

  10. csp20141203 集合竞价 解题报告

    Solution:对股票出价进行排序,然后按照价格递增的次序依次设定p的价格并求成交量.1. //prove that the result of price(maximum--maxprice) i ...