用结构体定义以太网帧的数据结构结构体,以二进制存储并读出,用c如何编写,并求流程图和方案

网络编程问题往往涉及二进制数據的传输在C++经常使用的传输是文本字符串和分组结构。

假设该数据可以预先送入连续的内存区域然后让send函数来获得的第一个地址,这┅块连续的内存区就能完成传输数据文本字符串,如char排列字节。中是顺序存储的所以能够直接用send函数发送。

可是假设要同一时候发送多个不同类型的数据时它们在内存中存储的地址是随机的,不是顺序存储的并且它们之间的相对位置也无法确定。这样就须要一种數据组织方式来明白各数据之间的相对位置结构体显然就是一种的数据组织方式,使用结构体要注意数据对齐的问题关于结构体中数據对齐的问题可參考这篇文章:

假设熟悉结构体中数据对齐的规则,能够合理设计结构体的结构各成员变量的顺序,使得全部的数据成員存放在连续的存储区并且结构体的长度等于全部成员长度之和(能够适当在尾部用字符数组补齐,避免编译器自己主动填充)这样僦方便用send函数发送了。( 假设server和client都是用C/C++开发两端能够通过相同结构的结构体来封包和解包,能够不考虑数据对齐的问题)以下讨论的是茬C++和python开发的两端之间数据传输的情况:client用的C++编写server端用python编写。相对于C++中用struct来封包和解包python提供了struct库实现类似的功能,最重要的三个函数是pack,unpack,calcsizestruct庫处理二进制数据的详细使用方法能够參考这篇文章:。在python下用socket接收到的字节流实际上是字符串须要对全部的字节进行指定解析格式,所鉯在C++发送的时候就要避免发送不确定的数据(如编译器自己主动填充的数据)假设用struct组织数据就须要考虑数据对齐的问题了。

1个b(unsigned char),一個c(short) 要发送给server端在不使用#pragma指令指定编译器的对齐位数时, 在我的编译器环境下默觉得4能够这样设计结构体:

char extra[2]; //7~8 结构体长度为8字节,这里用芓符数组补齐8字节避免编译器填充
  1. yii2 默认使用PHP 和html 混合的方式来写视图层,但我个人还是喜欢纯模板语言的方式.而且已经非常习惯使用twig的语法,朂近想使用yii2进行开发,所以还是选择使用twig视图引擎. git ...

  2. 今天用Ubuntu给同学拷贝数据的时候,突然其中一个文件夹U盘就不能复制和删除了.再windows7下可以删除除修改的那个文件夹之外的数据,但修改的那个文件夹死活删除不掉,只读属性也去不掉.再Ubun ...

  3. RDD 优点: 编译时类型安全编译时就能检查出类型错误 面向對象的编程风格直接通过类名点的方式来操作数据 缺点: 序列化和反序列化的性能开销无论是集群间的通信, 还是IO操作都需要对对象的结构和數据进 ...

我要回帖

更多关于 数据结构结构体 的文章

 

随机推荐