使用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. zxing生成二维码设置边框颜色

    真是研究了很久很久,满满的泪啊 zxing生成二维码,默认是可以增加空白边框的,但是并没有可以设置边框颜色的属性. 其中增加空白边框的属性的一句话是: Map hints = new HashMap( ...

  2. MT【230】一道代数不等式

    设$a,b,c>0,$满足$a+b+c\le abc$证明:$\dfrac{1}{\sqrt{1+a^2}}+\dfrac{1}{\sqrt{1+b^2}}+\dfrac{1}{\sqrt{1+ ...

  3. [hgoi#2019/2/24]玄学考试

    感想 对于这次考试,真的不想说什么了,太玄学了!!! t1输出比标准输出长,这是什么操作???难道要关文件???但是交到oj上又A掉了.这是什么操作. t2还好,没有出什么意外...但是要吐槽一下出题 ...

  4. 最长上升子序列LIS(51nod1134)

    1134 最长递增子序列 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递 ...

  5. (HDU 1542) Atlantis 矩形面积并——扫描线

    n个矩形,可以重叠,求面积并. n<=100: 暴力模拟扫描线.模拟赛大水题.(n^2) 甚至网上一种“分块”:分成n^2块,每一块看是否属于一个矩形. 甚至这个题就可以这么做. n<=1 ...

  6. 关于promise的一些用法

    Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息. Promise对象有以下两个特点 ...

  7. 一个程序如何在调试时退出调试或退出while循环

    1.退出调试 按Ctrl+C 2.退出while循环 比如 #include <stdio.h> #include <stdlib.h> int main() { long a ...

  8. NCBI上查看SNP位点在哪个基因座上(locus)

    首先,进入NCBI的主页网站:https://www.ncbi.nlm.nih.gov/variation/view/ 进入后,在下图红色框框位置输入目的SNP,比如rs608139 输完后,出现如下 ...

  9. 使用WinDbg下的gflags工具导致程序无法执行

    问题:the system cannot find file **.exe. 解决方法:开始-运行-输入regedit打开注册表编辑器,找到 HKEY_LOCAL_MACHINE/SOFTWARE/M ...

  10. CodeForces786B 线段树 + 最短路

    给定n颗行星,q次处理,地球位置为s,求解在q次处理后,地球到每一颗行星的位置. 其中q有三种不同的操作: 输入v,u,wv,u,w,构建一条从vv到uu的代价为ww的路线 输入u,l,r,wu,l, ...