Linux网络基础2之协议

 (。・∀・)ノ゙嗨!你好这里是ky233的主页:这里是ky233的主页,欢迎光临~icon-default.png?t=N7T8https://blog.csdn.net/ky233?type=blog

点个关注不迷路⌯'▾'⌯

目录

1.协议

1.序列化与反序列换

2.协议定制

二、网络版本的计算器

1.约定与协议

2.守护进程

3.代码


1.协议

协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如果我们要传输一些 "结构化的数据" 怎么办呢? 

1.序列化与反序列换

发送数据时将这个结构体按照一个规则转换成字符串, 接收到数据的时候再按照相同的规则把字符串转 化回结构体;

这个过程叫做 "序列化" 和 "反序列化"

2.协议定制

所谓的协议定制是来定义请求以及未来响应的字段都需要哪些,字段本身就是协议的一部分,还有很多细节在代码中体现出来

二、网络版本的计算器

1.约定与协议

约定:就比如是我们规定好的计算顺序,如果顺序不对则无法进行计算

协议:

  • 我们结构化的约定就叫做协议
  • 我们需要把这些数据发给服务器或者客户端,就需要把这些数据转换成字节流,对方基于收到的字节流,对其做反序列化,无论是发送或接受都需要进行序列和反序列化!

因为TCP是面向字节流的(TCP有可能一个一个读也有可能一次全部读完),那么我们读取的时候怎么保证是一个完整的请求呢?

当我们调用send或者write的时候只是把我们的数据拷贝到了发送缓冲区,在调recv或者read的时候之后只是把接受缓冲区拷贝到用户定义的缓冲区

所以:

  • io接口:本质都是拷贝函数
  • 发送的次数和接受的次数,没有任何关系,叫做面向字节流!

 单纯的recv是无法解决这个问题的,所以需要更进一步的协议定制

UDP是面向数据报的,每次都是完整的报文,则不会有上述问题

2.守护进程

1.前台进程:和终端关联的进程,判断标准为,该进程能否获取输入,如bash

2.任何xshell登录,只允许一个前台进程和多个后台进程

3.进程除了有自己的pid和ppid,还有组id TPGID

4.在命令行中,同时用管道启动多个进程,多个进程是兄弟关系,父进程是bash,可以用匿名来进行管道通信

5.而同时被创建的多个进程可以成为一个进程组的概念,组长一般是第一个进程PGID

6.SID:任何一次登录,登陆的用户,需要有多个进程(组),来给这个用户提供服务的(bash),用户自己可以启动很多进程,或者进程组。我们给用户提供服务的进程,或者用户自己启动的所有的进程或者服务,整体都是属于一个叫做会话的机制中的

退出登陆的时候,启动的服务就有可能退出,但是我们需要一种服务不退出的机制就叫做守护进程,所以我们就需要把这个进程自成一个会话,

7.如何将自己变成自成会话呢?

调用setsid()函数 ,就把这个进程变成单独的会话组了

8.setsid要成功被调用,必须保证当前进程不是进程组的组长

那么怎么保证不是组长呢?可以通过fock(),变成子进程

9.守护进程不能向显示打印消息,一旦打印会被暂停

devnull相当于linux的文件黑洞,任何到里面的东西自动销毁

3.代码

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

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

相关文章

【C语言】linux内核ip_generic_getfrag函数

一、讲解 这个函数ip_generic_getfrag是传输层用于处理分段和校验和的一个辅助函数,它通常用在IP层当需要从用户空间拷贝数据构建成网络数据包时。这个函数的实现提供了拷贝数据和进行校验和计算(如果需要的话)的功能。函数的参数解释如下&a…

【打工日常】使用docker部署个人实时在线文档协助编辑器

一、Etherpad介绍 Etherpad是一个高度可定制的开源在线编辑器,提供真正实时的协作编辑。放在自己的服务器里面,可以更大程度的保护自己工作的隐私,并且Etherpad允许您实时协作编辑文档,就像在浏览器中运行的实时多人编辑器一样这样…

深入解析汽车MCU的软件架构

一、背景知识 电动汽车(EV)正在成为首选的交通方式,为传统内燃机汽车提供了一种可持续发展的环保型替代方案。在电动汽车复杂的生态系统中,众多电子控制单元(ECU)在确保其高效运行方面发挥着至关重要的作用…

关于 JVM

1、请你谈谈你对JVM的理解? JVM由JVM运行时数据区(图示中蓝色框包含部分)、执行引擎、本地库接口、本地方法库组成。 JVM运行时数据区,分为方法区、堆、虚拟机栈、本地方法栈和程序计数器。 1.方法区 Java 虚拟机规范中定…

【ubuntu】安装 Anaconda3

目录 一、Anaconda 说明 二、操作记录 2.1 下载安装包 2.1.1 官网下载 2.1.2 镜像下载 2.2 安装 2.2.1 安装必要的依赖包 2.2.2 正式安装 2.2.3 检测是否安装成功 方法一 方法二 方法三 2.3 其他 三、参考资料 3.1 安装资料 3.2 验证是否成功的资料 四、其他 …

数据库中 SQL Hint 是什么?

前言 最近在调研业界其他数据库中 SQL Hint 功能的设计和实现,整体上对 Oracle、Mysql、Postgresql、 Apache Calcite 中的 SQL Hint 的设计和功能都进行了解,这里整理一篇文章来对其进行梳理,一是帮助自己未来回顾,加深自己的思…

每日一练:LeeCode-209、长度最小的子数组【滑动窗口+双指针】

每日一练:LeeCode-209、长度最小的子数组【滑动窗口双指针】 思路暴⼒解法滑动窗口 本文是力扣 每日一练:LeeCode-209、长度最小的子数组【滑动窗口双指针】 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐 L…

【论文笔记】Language Models are Few-Shot Learners

Language Models are Few-Shot Learners 本部分是 GPT-3 技术报告的第一部分:论文正文、部分附录。 后续还有第二部分:GPT-3 的广泛影响、剩下的附录。 以及第三部分(自己感兴趣的):GPT-3 的数据集重叠性研究。 回顾…

React改变数据【案例】

State传统方式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>React Demo</title> <!--…

高效备考2025年AMC8数学竞赛:2000-2024年600道AMC8真题解析

我们继续来随机看五道AMC8的真题和解析&#xff0c;根据实践经验&#xff0c;对于想了解或者加AMC8美国数学竞赛的孩子来说&#xff0c;吃透AMC8历年真题是备考最科学、最有效的方法之一。 即使不参加AMC8竞赛&#xff0c;吃透了历年真题600道和背后的知识体系&#xff0c;那么…

PyQt5开发基础知识【一】

零.前言&#xff1a; 作者写这篇博客的目的主要在于巩固PyQt5的基础知识&#xff0c;例如PyQt5的几个核心模块&#xff0c;分别有什么功能&#xff0c;PyQt5的所有控件的使用方法等。 一.PyQt5的常见模块 1.1QtCore&#xff1a; 该模块包含了非GUI的功能设计。 这个模块被…

报错Importing ArkTS files to JS and TS files is not allowed. <etsLint>

ts文件并不支持导入ets文件&#xff0c;为了方便开发应用卡片&#xff0c;entryformAbility创建的时候默认是ts文件&#xff0c;这里只需要把ts文件改成ets便可以轻松的导入所需要的ets即可 我创建了一个鸿蒙开发的交流群&#xff0c;喜欢的鸿蒙朋友可以扫码或者写群号&#xf…