使用socket传输组织好的不同类型数据,有四种不同的方式(我知道的嘿嘿):

a. 结构体

b. Json序列化

c. 类对象

d. protobuf

下面逐一整理一下,方便以后进行项目开发。

1. 使用结构体

假设需要传送的结构体如下:

1

2

3

4

5

6

struct person

{

   char name[20];     // 注意:CPU访问内存的时候,对访问地址有对齐的要求,一般为2的幂次方。所以,有的数据被填充,以满足对齐要求。

   int age;

   float high;

};

可在发送数据的地方对数据进行处理,将其转换成一个字符串进行传送,而在接受方定义相同的结构体对这个字符串进行解析即可。

  发送方代码:

1

2

3

4

5

6

7

8

9

10

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);

或者

1

2

3

4

5

6

struct person p1; //声明一个需要传送的结构体

p1.age = 10;

p1.high = 1.80f;

strcpy(p1.name,"zhangsan",sizeof(p1.name));

 

send(sock,(char*)&p1,sizeof(person),0);

  接收方代码:

同样需要定义字符串和相同的结构体对象

1

2

3

4

5

6

7

8

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

设置缓冲区的长度和结构体长度保持一致,否则收的数据可能不对。

SOCKADDR_IN addrSrv;addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(port);SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);int nRecvBuf = 1516;//设置为32Kint nSendBuf = 0;//设置为32Ksetsockopt(sockClient, SOL_SOCKET, SO_RCVBUF, (const char*)&nRecvBuf, sizeof(int));setsockopt(sockClient, SOL_SOCKET, SO_SNDBUF, (char *)&nSendBuf, sizeof(int));inet_pton(AF_INET, ip, &addrSrv.sin_addr.s_addr);if (connect(sockClient, (struct sockaddr*)&addrSrv, sizeof(addrSrv)) == -1)return -2;if (SOCKET_ERROR == sockClient) {printf("Socket() error:%d", WSAGetLastError());return -3;}

c++ socket 结构体相关推荐

  1. linux sock结构体,struct socket结构体详解

    在内核中为什么要有struct socket结构体呢? struct socket结构体的作用是什么? 下面这个图,我觉得可以回答以上两个问题.  由这个图可知,内核中的进程可以通过使用struct ...

  2. 网络协议栈3:sock结构体

     sock结构体是我们在网络编程中遇到的第一个庞大的结构体 struct sock {   struct options      *opt;/*IP选项缓存于此处*/   volatile unsi ...

  3. socket编程之addrinfo结构体与getaddrinfo函数

    1. 概述 IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间.IP ...

  4. C++ socket传输结构体

    我遇到的问题是,接收的数据转成结构体后,结构体读取值不对,只有ret是对的,代码如下: int ret = recv(deviceInfo.sockClient, (char *)(&rece ...

  5. socket传输结构体,c++,发送OK,recv返回字节大小正确但接受数据为空

    socket传输结构体,c++,发送OK,recv返回字节大小正确但接受数据为空 服务端在ubuntu服务器下,客户端在windows下,采用socket进行通信,在客户端接收数据时,出现了诡异的情况 ...

  6. 三、初识Socket套接字结构体

    一.初识Socket套接字结构体 1.通用套接字结构体类型 struct sockaddr{sa_family_t sa_family; //协议簇char sa_data[14]; //协议簇数据} ...

  7. C# Socket 入门5 UPD 结构体 与 C++ 通信

    这篇文章本来是星期五晚写好了, 因6日去旅游了, 没来得急发上来 1. 同样, 我们先看看这一个比简单的 结构体 代码 using System; using System.Collections.G ...

  8. qt socket 传递结构体 结构体中有list_计算机网络应用--Socket编程实验(二)

    本节关于socket部分函数库列表,具体基于socket的实例实现代码见下节.给出基于winSocket的简单websever实例. 2.1 WSAStartup() [函数原型] int WSASt ...

  9. Linux C Socket编程发送结构体、文件详解及实例

    利用Socket发送文件.结构体.数字等,是在Socket编程中经常需要用到的.由于Socket只能发送字符串,所以可以使用发送字符串的方式发送文件.结构体.数字等等. 本文:http://www.c ...

最新文章

  1. python automl_分享一篇比较全面的AutoML综述
  2. 2019年6月SAP发布的未来ABAP平台的发展方向
  3. 深度学习《变分自编码器》
  4. 吴江智慧城市产业化“航母”起航
  5. Android调用默认浏览器打开指定url
  6. 二维数组越界_中国电子学会青少年软件编程等级考试2级(C/C++)专题二:一维数组...
  7. HTML(超文本标记语言)-----WEB开发基础之二
  8. Task04 Python操作PDF
  9. llS 10.0详细错误-404.0 - NotFound
  10. matlab里qmul,哈工大四系导航原理 大作业 INS部分
  11. Win10忘记登录密码,系统U盘/光盘轻松重置
  12. mini2440 sd卡支持
  13. 编译Android源码(9.0)
  14. printf(\033[1;33m Hello World. \033[0m \n);有趣的串口之超级终端的玩法
  15. 帝国cms html5 编辑器,帝国CMS修改默认编辑器为百度编辑器UEditor的方法
  16. DevOps实践|快速提升团队软件开发成熟度,提升研发效能
  17. 免费申请.tk国际顶级域名-攻略
  18. mount -o rw,remount /system /system’ not in /proc/mounts
  19. Python金融大数据分析-数据获取与简单处理
  20. Mimikatz学习笔记

热门文章

  1. 新手建议学php吗,关于PHP新手学习的一些指导和建议,新手来我的
  2. python import from区别_python import 与 from .... import ...区别-阿里云开发者社区
  3. 动态追踪技术思想及应用
  4. 一个通用的任务管理模型-golang
  5. C Capture Full IE Document
  6. 宝安区2021年高考成绩查询入口,宝安区2021年初一学位网上预申请系统http:bajjk.sz.edu.cn/visitbagbcyjz...
  7. [总结篇1]openstack neutron 中是如何做到二层隔离的
  8. linux内核线程创建销毁机制
  9. shell脚本中使用seq生成连续整数
  10. ajax怎么创建json对象,ajax jsonp我写的方法怎么调用不了? 为什么用$.getJSON方法能生成数据?...