协议和序列化反序列化

我就是我 2024-04-25 20:20 168阅读 0赞

“协议”和序列化反序列化

“协议”的概念:

“协议”本身是一种约定俗成的东西,由通讯双方必须共同遵从的一组约定,因此我们一定要将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容

我们把这个规矩叫做“协议”

序列化和反序列化的概念:

序列化是指将对象转换为字节流或其他可存储或传输的格式,以便将其存储在文件中或通过网络发送到另一个系统。反序列化是指将序列化的数据重新转换为对象。在序列化和反序列化过程中,对象的状态信息被保存和恢复,以保证数据的完整性和正确性。在分布式系统中,序列化和反序列化是实现远程方法调用和消息传递的重要技术。

例如微信发送一条消息,会将头像、昵称、消息内容、发送时间等“结构化”数据进行序列化,形成一个字节流报文,通过网络将该报文发送给接收方,接收方进行反序列化将报文重新拆解为头像、昵称、消息内容、发送时间等“结构化”数据。

img

TCP协议,如何保证接收方收到了完整的报文呢?

img

1、我们调用的所有发送/接收函数,并不是直接从网络中发送/接收数据,应用层调用的发送/接收函数,本质是一个拷贝函数。
例如客户端发送数据时,应用层调用发送函数将会把应用层的发送缓冲区数据拷贝至传输层的发送缓冲区。传输层自主决定何时将发送缓冲区的数据发送至网络里,再通过网络发送至服务器的接收缓冲区中,所以TCP协议是一种传输控制协议。

2、TCP协议的通信双方的发送缓冲区和接收缓冲区互不干扰,可以双向同时进行通信。TCP是一种全双工的通信协议。

3、如果TCP服务器的读取速度跟不上客户端的发送速度,将会导致服务器接收缓冲区积攒大量的报文,这些报文数据可是一连串的粘连在一起的,如何一条一条的将完整的报文提取出来呢?使用协议!协议设计方式:

定长(例如规定该报文定长为10 24字节)
特殊符号(在报文和报文之间增加特殊符号)
自描述方式(自己设计协议)

img

如果是UDP协议,UDP客户端,发送报文时只需创建请求,对请求进行序列化后即可发送;接收报文时只需将接收的数据进行反序列化即可。无需进行协议内容的添加与解析。这是因为UDP每次发送与接收都是以数据报的形式,数据是完整的,不像TCP是面向字节流,需要使用相关的协议进行界定报文边界。

json序列化和反序列化

使用如下命令:

  1. sudo yum install -y jsoncpp-devel

使用如下命令查看json的位置:

img

json的头文件:

  1. #include <jsoncpp/json/json.h>

先前若我们想要让代码执行json版的序列化和反序列化操作需要用到宏定义:img

  • 如果我们定义了此宏,那么后续的序列化和反序列化操作就使用自己的,如果没定义,则用json的。现在我们可以在makefile中定义变量-D。

-D:命令行定义宏。目的:这样就不用把宏定义在源代码中(不用动源代码了),某种宏的定义会决定条件编译对相应代码进行裁剪。

img

-ljsoncpp 包json对应的第三方库

-ljsoncpp :包第三方库,去掉 libjsoncpp.so 前缀和后缀img

去掉 libjsoncpp.so 前缀和后缀[外链图片转存中…(img-VgAMiu8p-1709176607814)]

img

发表评论

表情:
评论列表 (有 0 条评论,168人围观)

还没有评论,来说两句吧...

相关阅读

    相关 协议序列序列

    协议”本身是一种约定俗成的东西,由通讯双方必须共同遵从的一组约定,因此我们一定要将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容我们把这个规矩叫做“协议”

    相关 序列序列

      互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分。通讯协议往往采用分层模型,不同模型每层的功能定义以及颗粒度不同

    相关 序列序列

    序列化和反序列化   摘要   序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没

    相关 序列序列

    个人学习理解 (只是自己默写序列化和反序列的代码以及几个问题) 1.序列化 和 反序列化 1.1 什么是序列化 和 反序列化 或者 你如何理解序列化和

    相关 序列序列

    序列化:指把堆内存中的 Java 对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络节点(在网络上传输)。这个过程称为序列化。通俗来说就是将数据结构或对象转换成二进