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.mzph.cn/news/733683.shtml

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

相关文章

JavaCV 进行视频操作

1、JavaCV实现将视频以帧方式抽取 ## JavaCV实现将视频以帧方式抽取java import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.Frame; import org.bytedeco.javacv.Java2DFrameConverter;import javax.imageio.ImageIO; import java.awt.image.Buffer…

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记10 - STM32的SDIO学习2

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记10 - STM32的SDIO学习2 一、问题回顾二、本次的任务三、 需要注意的问题3.1 Card Identification Mode时的时钟频率3.2 CMD0指令的疑似问题3.3 发送带参数的ACMD41时要注意时间时序和时效3.4 CPSM的指令发送问题3.5 调试过程中的SD卡的…

linuxOPS基础_linux系统注意事项

Linux严格区分大小写 Linux 和Windows不同,Linux严格区分大小写的,包括文件名和目录名、命令、命令选项、配置文件设置选项等。 例如,Win7 系统桌面上有文件夹叫做Test,当我们在桌面上再新建一个名为 test 的文件夹时&#xff0c…

R统计学2 - 数据分析入门问题21-40

往期R统计学文章: R统计学1 - 基础操作入门问题1-20 21. 如何对矩阵按行 (列) 作计算? 使用函数 apply() vec 1:20 # 转换为矩阵 mat matrix (vec , ncol4) # [,1] [,2] [,3] [,4] # [1,] 1 6 11 16 # [2,] 2 7 12 17 # [3,] …

操作系统的基本概念5-系统调用

系统调用是操作系统提供给应用程序的一种接口,通过这个接口,应用程序可以请求操作系统执行特定的操作,例如读写文件、创建进程、网络通信等。系统调用是应用程序与操作系统之间的桥梁,它允许应用程序访问底层的硬件和资源。 系统…

总结工作中vue2和vue3的知识点区别

vue2和vue3的区别 前言 vue2升级vue3之后变得更快,更轻,协作更方便。无论对于我们开发者的体验或者用户使用方面都是升级优化,但是本质区别是什么,下面分为几个部分进行讲解。vue2和vue3 对比vue2vue3脚手架命令式可视化创建脚…

嵌入式Linux串口和 poll() 函数的使用

一、poll() 函数的介绍 poll() 函数用于监控多个文件描述符的变化的函数。它可以用来检查一个或多个文件描述符的状态是否改变,比如是否可读、可写或有错误发生。它常用于处理 I/O 多路复用,这在需要同时处理多个网络连接或文件操作时非常有用。 头文件…

CentOS 7.6安装部署Seafile服务器

今天飞飞和你们分享CentOS 7.6上安装基于MySQL/MariaDB的Seafile服务器的方法,包括下载和安装7.0.5版本、配置数据库、启动服务器等步骤。安装成功后,需要通过nginx反向代理才能访问seafile服务。 通过预编译好的安装包来安装并运行基于 MySQL/MariaDB …

爬虫之矛---JavaScript基石篇1<window对象、Node.js和prototype/constructor的解析(1)>

前言: JavaScript是一种广泛应用的编程语言,几乎在所有现代浏览器中都能运行。它已成为Web开发的基石,使我们能够为用户提供交互性和动态性。在JavaScript中,有几个重要的概念和对象,其中包括window对象、Node.js以及prototype/c…

蓝桥杯大赛软件python赛道真题:跑步锻炼

真题链接:https://www.lanqiao.cn/problems/597/learning/ 题目描述: 小蓝每天都锻炼身体。 正常情况下,小蓝每天跑1干米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑2干米。如果同时是周一或月 初&#xff…

高吞吐SFTP连接池设计方案

背景 在现代的数据驱动环境中,安全文件传输协议(SFTP)扮演着至关重要的角色,它提供了一种安全、可靠的文件传输方式。我们目前项目是一个大型数据集成平台,跟上下游有很多文件对接是通过SFTP协议,当需要处…

果蔬作物疾病防治系统|基于Springboot的果蔬作物疾病防治系统设计与实现(源码+数据库+文档)

果蔬作物疾病防治系统目录 目录 基于Springboot的果蔬作物疾病防治系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、果蔬百科列表 2、公告信息管理 3、公告类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推…

【蓝桥·算法双周赛】第七场分级赛——小白入门赛

2.霓虹【算法赛】 - 蓝桥云课 (lanqiao.cn) st数组用来存第i个位置&#xff0c;这个字母有没有编号j #include<bits/stdc.h> const int N1e610; using lllong long; std::map<std::string,std::string> mp;std::string a,aa; int st[N][10];// int stt[N][10];//对…

Qt 拖动事件

文章目录 1 自定义控件 TextEdit2 实现打开文件功能3 实现鼠标滚轮放大字体 QEvent::DragEnter 当拖动文件进入到窗口/控件中时&#xff0c;触发该事件&#xff0c;它对应的子类是QDragEnterEvent QEvent::DragLeave 当拖动文件离开窗口/控件时&#xff0c;触发该事件&#xff…

【C/C++ 学习笔记】流程结构

【C/C 学习笔记】流程结构 视频地址: Bilibili 顺序结构 程序按顺序执行&#xff0c;不发生跳转 选择结构 依据条件是否满足&#xff0c;有选择的执行相应功能 v-if 结构 if (age < 18) {cout << "You are a child." << endl; } else if (age …

WordPress高端后台美化WP Adminify Pro优化版

后台UI美化WP Adminify Pro修改自定义插件&#xff0c;适合建站公司和个人使用&#xff0c;非常高大上&#xff0c;下载地址&#xff1a;WP Adminify Pro优化版 修复记录&#xff1a; 1、修复已知BUG 2、修复手机版兼容问题 3、修复打开速度&#xff0c;原版打开速度太慢 4…

自动裁剪人脸:简化你的数字人素材准备

在做数字人时,需要对采集的数据进行预处理,然后才能进行模型训练, 预处理常用的操作有:去背景 音频重采样 视频裁剪 音频特征提取等等,今天我们来分享一个自动化脚本: 对原图/视频进行人脸检测并根据目标尺寸以人脸为中心进行裁剪. 目录 1. 效果 2. 对图片进行裁剪 3.对视频…

DeepLearning in Pytorch|共享单车预测NN详解(思路+代码剖析)

目录 概要 一、代码概览 二、详解 基本逻辑 1.数据准备 2.设计神经网络 初版 改进版 测试 总结 概要 原文链接&#xff1a;DeepLearning in Pytorch|我的第一个NN-共享单车预测 我的第一个深度学习神经网络模型---利用Pytorch设计人工神经网络对某地区租赁单车的使用…

华为OD面试分享11(2024年)

背景: 21届非科班211目标院校,无经验转行有编程基础,gap1年多一点1.19 机考 250(准备一周左右技术面试,才开始投递部门的)第一题 平衡字符串 第二题 剩余银饰重量 第三题不太记得,只过了一点用例 机试前两题是原题,有在栗栗姐给的题库刷到过 1.26 原先投递部门因为…

CCCoreLib 点云间近似距离计算(CloudCompare内置算法库)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 CloudCompare设计之初就是为了比较两个点云之间的差别,这里的点云间近似距离计算就是一种比较两个点云的方法。CloudCompare特有的八叉树结构,可以使它通过计算体素(Voxel)与体素之间的距离快速评估点云之间的近…