序列化,应用层自定义协议

我们发的是一个结构化的数据

OS内部,协议全部都是传递结构体对象。可以直接发送二进制对象吗?因为CS双方都能认识这个结构体!!!

可以直接发送二进制对象,但是不建议

1. 客户端和服务器说属于不同的OS,不同的结构体,在不同的对齐方案下,我们的结构体大小可能不一样。存在内存对其问题,可能导致无法正确解析

2. 客户端和服务器的语言可能不同

从今天开始,我们要进行网络协议的通信,在应用层,强烈建议使用序列化和反序列化方案,至于直接传递结构体的方案,除非特殊场景,否则不建议

write本质是拷贝,

1. write,read就是收发消息 -- write,和read是不是把数据发送到了网络中? 不是,本质上把数据由用户拷贝到Os内核里,os决定什么时候发,OS把数据发送到网络中,本质也是拷贝

2. 主机间通信的本质:把发送方的发送缓冲区内部的数据,拷贝到对端的接受缓冲区

3. TCP通道是全双工的?因为有两对发送和接受缓冲区,接受和发送是分离的

读数据其实是检测接受缓冲区里有没有数据,没有数据read就会阻塞,read也是拷贝,从内核拷贝到用户

文件描述符对应的tcp发送缓冲区,tcp自主决定什么时候发,发多少,出错了呢?传输控制协议

四组生产者消费模型(内核和用户之间),阻塞?因为和系统做同步

计算机世界:通信即拷贝

tcp:面向字节流,什么时候发?发多少?出错?

在tcp中,要读到完整的报文,由接收方应用层自己决定的

我们未来定制的协议:

1.结构化字段,提供好序列化和反序列化方案

2.解决因为字节流问题导致读取不完整的问题(只处理读取)

Jsoncpp是一个用于处理TSON数据的C++库,他提供了将JSON数据序列化为字符串以及从字符串反序列化为C++数据的功能,Jsoncpp是开源的,广泛用于各种需要处理JSON数据的C++项目

因为tcp是面向字节流的。当读取方在读取的时候,可能读到一个完整的json请求,也可能会读到半个、一个、五个、五个半请求json串。都会有可能存在

read本身并不能保证读到的报文的完整性,只能保证如果有数据就读上来。谁来保证报文的完整性?应用层程序员自己保证。就需要进一步定制协议。

当我们tcp中读取数据的时候,读到的报文不完整,或者多读导致下一个报文不完整,这个问题就叫做“粘报”问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94884.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

序列化和反序列的学习

一:重谈协议1 理解网络协议,可以把它想象成网络世界里的“交通规则”和“通用语言”。它是一套预先定义好的规则、标准和约定,使得不同设备、不同系统之间能够顺利地进行通信和数据交换。我们从TCP协议上面理解一下,首先TCP服务是…

计算机毕业设计 java 在线学习系统 基于 Java 的在线教育平台 Java 开发的学习管理系统

计算机毕业设计 java 在线学习系统fk01a40i (配套有源码 程序 mysql数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联xi 可分享传统学习模式受时空限制,互动性不足,难以满足个性化学习需求。为打破限制&…

淘宝利用商品关键词获取商品信息指南

一、核心API接口选择接口名称功能描述适用场景taobao.items.search通过关键词搜索商品,支持分页、排序,返回商品列表(含标题、价格、销量、图片等)普通商品搜索、竞品监控、数据分析taobao.tbk.item.get淘宝客API,返回…

红黑树下探玄机:C++ setmultiset 的幕后之旅

目录 一、关联式容器 二、键值对 三、set 四、set的构造 五、set的iterator 六、set的Operations 七、multiset 一、关联式容器 序列式容器 : 在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、forwa…

Spring : 事务管理

1. 基本概念 事务(Transaction)是一组不可分割的操作单元,这些操作要么全部成功执行,要么全部失败回滚,不存在部分成功的情况。 事务具有ACID特性: 原子性(Atomicity):事…

C# 一个投资跟踪程序的设计与实现:面向对象与设计模式的深度解析

在现代金融应用开发中,如何高效、灵活地构建投资跟踪系统,是每一个金融软件工程师必须面对的挑战。本文将围绕一个投资跟踪程序的设计与实现过程,深入剖析其背后的设计理念、架构模式以及具体实现细节。我们将通过面向对象编程、设计模式&…

存储的未来之战:RustFS如何用ZK框架重构分布式协调?

本篇文章目录 一、导火索:当数据洪峰撞上分布式协调的天花板 二、技术密码:ZK框架的三大重构 2.1 一致性哈希环的量子级进化 2.2 动态负载均衡的"神经反射" 2.3 跨云数据同步的"时空折叠" 三、未来战争:2026年存储…

模拟实现STL中的list容器

list前言一、list的节点结构设计二、迭代器设计三、list类的实现3.1 类的成员变量和类型定义3.2 构造函数与析构函数3.3 元素访问与迭代器接口3.4 插入与删除操作3.5 其他常用操作四、总结每文推荐前言 在C STL中,list是一个非常常用的容器,它基于双向循…

Debug-039-el-date-picker组件手动输入时间日期的问题处理

图1-外输入框图2-内输入框图3问题描述:这两天在迭代功能的时候,基本上碰到的问题都是出自这个“时间日期选择框”,昨天的bug38也是解决这个组件。如上图1和2所示,可以把图1中的输入框叫外输入框,图2中的输入框叫内输入…

docker-runc not installed on system

问题 Docker build时Dockerfile有RUN命令执行报错shim error: docker-runc not installed on system,如下:解决方法 修改/etc/docker/daemon.json,添加正面内容 {"runtimes": {"docker-runc": {"path": "…

【秋招笔试】2025.08.27华为秋招研发岗真题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 题目一:智能温控系统监测 1️⃣:使用滑动窗口技术维护有效温度区间 2️⃣:利用单调队列高效维护窗口内的最大值和最小值 3️⃣:动态调整窗口边界,确保满足温…

Kafka 消费模型

文章目录1. 一个消费者组中只有 1 个消费者2. 一个消费者组中有 2 个消费者3. 消费者数量 > 分区数量4. 多个消费者读取同一个分区5. 消费者放入消费者组5.1 何时放入同一个消费者组5.2 何时放入不同的消费者组1. 一个消费者组中只有 1 个消费者 假设我们有一个 TopicT1&am…

【路由器】TP Link 路由器为何无法进入管理后台

TL-WR710N是TP Link在很多年前发布的一个迷你型的便携路由器,一插上还能用,直接reset打算重设密码,结果根据它给的192.168.1.253根本打不开。# 解决方法ping一下192.168.1.253,无法连接。这个问题本质上是 你电脑/手机的 IP 和路由…

LightGBM(Light Gradient Boosting Machine,轻量级梯度提升机)梳理总结

LGB微软团队在 2017 年提出的梯度提升树模型,核心定位是 “更高效的 XGBoost”—— 它在保持精度接近 XGBoost 的同时,通过“数据采样优化”“特征压缩”“树生长策略改进”三大创新,将训练速度提升 10-100 倍,内存消耗降低数倍&a…

毕业项目推荐:29-基于yolov8/yolov5/yolo11的光伏板检测识别系统(Python+卷积神经网络)

文章目录 项目介绍大全(可点击查看,不定时更新中)概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式…

【实时Linux实战系列】实时数据可视化技术实现

在当今数据驱动的世界中,实时数据可视化已成为理解和利用实时信息的关键工具。无论是在金融交易监控、工业生产监控、智能交通管理还是物联网设备监控中,能够将复杂的数据以直观的图表形式展示出来,对于快速决策和问题解决至关重要。实时数据…

【LeetCode每日一题】21. 合并两个有序链表 2. 两数相加

每日一题21. 合并两个有序链表题目总体思路算法步骤时间复杂度与空间复杂度代码2. 两数相加题目总体思路算法步骤时间复杂度与空间复杂度代码知识感悟2025.8.3021. 合并两个有序链表 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所…

DVWA靶场通关笔记-文件包含(Impossible级别)

目录 一、源码分析 二、文件包含防范分析 1、明确指定允许包含的文件 2、拒绝所有未在白名单中的输入 3、总结 (1)白名单 (Allow List) (2)硬编码/映射 (Hardcoding/Mapping) (3)输入过滤 (Input F…

构建坚不可摧的数据堡垒:深入解析 Oracle 高可用与容灾技术体系

在当今数字化时代,数据是企业的核心资产,而承载这些数据的数据库系统的连续性与稳定性直接关系到企业的生死存亡。一次计划外的停机或灾难性的数据丢失,带来的不仅是经济上的巨大损失,更是对品牌信誉和客户信任的致命打击。因此&a…

【3D算法技术入门】如何基于建筑图片重建三维数字资产?

要基于建筑图片重建三维数字资产是一个复杂的计算机视觉任务,涉及图像采集、特征提取、相机姿态估计、稠密重建和三维模型优化等多个步骤。下面我将提供一个基于Python的解决方案框架,使用开源库实现从图片到三维模型的基本流程。 首先需要安装必要的库&…