Linux套接字编程-3

news2024/11/26 0:58:01

在之前的套接字编程内容中,我们讲述完了UDP和TCP的主要内容,但是对于TCP通信中具体的实现还存在一些问题没有解决,所以我们本篇博客将对进行分析和解决。

目录

1.引入

2.多进程

3.多线程

1.引入

在上一篇博客中,当我们使用TCP通信时,发现客户端和服务端并不能很好的实现稳定通信,这是由于我们新建连接时,所设计接收它的“new_sock"是一个局部变量。故当一次通信结束后,局部变量的生命周期也随之结束,进而导致通信中断。

我们根据TCP协议的特性:新建连接时需要创建新的socket--设计的循环接收新连接。反而因为局部变量的生命周期导致通信无法稳定运行,那么为了处理因为使用局部变量来接收新建连接,而导致的通信不稳定问题。

我们可以使用多进程或多线程来进行处理,通过新建的子进程或线程来接收新建连接,并让新建的子进程或线程来和客户端通信。我们将执行流分开,在服务端创建新的执行流,来负责与每个新连接的客户端通信。如此操作,更好的满足了TCP通信的特性,并且实现了TCP通信的稳定性。

2.多进程

对于主进程我们只让其负责一件事情,即获取新连接。若获取新连接成功,则创建一个新的子进程,让新创建的子进程来和客户端进行通信。

而子进程能够和客户端通信是因为子进程复制父进程,会连同获取的新建连接描述符也也一起复制,所以子进程在内核中也能找到对应的socket结构。

我们编译并执行,可以得到结果如下,并发现在客户端退出后,查看服务端进程中并未存在僵尸进程。 

从结果上来看,多客户端和服务端通信,服务端并无法很好的将发送方和回复方联系起来。这是因为从设计代码中我们并未将其一一分开,就是多个客户端会抢同一个进程来让服务端回复数据。

最后需要提醒的是,在设计代码中,存在两个关键点需要我们注意。首先是注意僵尸进程的产生,防止子进程在推出之后成为僵尸进程,占用资源;

其次是父进程中文件描述符的处理,因为父子进程之间“代码共享,数据独有”所导致的:父进程同样会创建套接字,但其实际上并不会使用,如此进行下去后,会导致父进程中套接字创建过多,造成资源泄露问题。

3.多线程

多线程处理思路和多进程类似,具体设计代码中根据线程和进程创建的异同来完成。

为了便于对线程的操作,我们对之前封装的tcp_sock.hpp类做一定改变:

加入fd和set函数,并将析构函数注释掉,具体原因在上述多线程代码中存在注释解释。

最后编译并实行得到结果如上所示,我们可以发现多线程处理仍可以很好的完成TCP协议通信。

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

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

相关文章

sed进阶之模式替换

shell脚本编程系列 &符号可以代表替换命令中的匹配模式,不管模式匹配到了什么样的文本,都可以使用&符号代表这些内容。这样就能处理匹配模式的任何单词了。 echo "The cat sleeps in his hat." | sed s/.at/"&"/g&…

告别低效繁琐的Prometheus告警管理,Nightingale助你快速响应故障!

Prometheus的告警规则、记录规则都是采用配置文件管理,适合奉行Infrastructure as Code的公司或团队内部使用。但如果要把监控能力开放给全公司,就要支持协同操作的 UI,让各个团队互不干扰的同时共享成果。 开源方案: Grafana 擅…

No.053<软考>《(高项)备考大全》【冲刺7】《软考之 119个工具 (5)》

《软考之 119个工具 (5)》 84.文档审查:85.信息收集技术:86.核对表分析:87.假设分析:88.图解技术:89.SWOT 分析:90.风险概率和影响评估:91.概率和影响矩阵(包含在风险管理计划中):92.风险数据质量评估:93.风险分类(包含在风险管理计划中):94.风险紧迫性评…

快速多关键字统计

实例需求:在每个章节中统计关键字(“√”, “”, “〇”, “空缺”)的个数,B列中的章节编号作为章节划分的标识,例如1.1.1 ~ 1.1.5为第1.1章节,对应工作表的12 ~ 16行,其中黄色列为需要统计的数…

【软考数据库】第五章 计算机网络

目录 5.1 网络功能和分类 5.2 OSI七层模型 5.3 TCP/IP协议 5.4 传输介质 5.5 通信方式和交换方式 5.6 IP地址 5.7 IPv6 5.8 网络规划和设计 5.9 其他考点补充 5.10 网络安全技术 5.11 网络安全协议 前言: 笔记来自《文老师软考数据库》教材精讲&#xff…

从张鑫旭的demo中,我学到了图像拉伸的原理

文章收录: 个人网址:http://linglan01.cn/Github仓库:https://github.com/CatsAndMice/blog/issues 产品经理又有新需求啦,其中有一个图片上传后用户拉伸图像宽高的功能,评估后因要卡上线时间来不及砍掉了。保不准下一…

Java 基础进阶篇(四)—— 抽象类与模板方法设计模式

文章目录 一、抽象类、抽象方法概述二、抽象类的特征三、模板方法设计模式3.1使用场景3.2 实现步骤3.3 写作文案例 补充:final 和 abstract 是什么关系? 一、抽象类、抽象方法概述 在 Java 中 abstract 是抽象的意思,可以修饰类、成员方法。 abstract …

【LeetCode股票买卖系列:122. 买卖股票的最佳时机 II | 贪心 | 暴力递归=>记忆化搜索=>动态规划】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

基于 GS232 搭建的 SoC_up 说明

1.1 GS232 开源版本简介 GS232 开源版本不包含 DSP、浮点部件等。 TLB 大小为 32 项。 指令和数据 Cache 为 4 路组相连,每路大小为 4KB,Cache 行大小为 32 bytes。 对外接口为 32 位 AXI 接口。 1.2 1,soc_up结构 SoC_up 如上图所示。开源 GS232 对外有一个 AXI 接口,连…

「Codeforces」771-div2 E. Colorful Operations

E. Colorful Operations https://codeforces.com/contest/1638/problem/E 题目描述 给你一个数组,默认初始元素为 0 ,颜色为 1,有三种操作: Color l r c:将 [l, r] 区间内的颜色修改为 cAdd c x:将所有颜…

Human Pose as Compositional Tokens 阅读笔记

人体姿态作为合成 token —— CVPR2023 论文链接 代码链接 摘要: 人体姿态常由身体关节的坐标向量或其热图embedding表示。虽然数据易于处理,但由于身体关节间缺乏依赖建模,即使是不现实的姿态也被接受。本文提出了一种结构化表示&#xff1…

el-form-renderer 使用指南

目录 前言 起步 使用 update-form && getFormValue 表单项动态显示或隐藏(hidden) 表单数据联动(on) 输入/输出格式化(inputFormat/outputFormat) set-options el-form-renderer 实践案例 案例一 案例二 自定义组件接入指南 前言 el-form-renderer是基于e…

Starting Windows PowerShell (启动 Windows PowerShell)

Starting Windows PowerShell (启动 Windows PowerShell) Windows PowerShell is a scripting engine .DLL that’s embedded into multiple hosts. The most common hosts you’ll start are the interactive command-line powershell.exe and the Interactive Scripting Envi…

【Java笔试强训 26】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥跳台阶扩…

Redis`数据结构`与`对象`概述

文章目录 Redis数据结构与对象概述一、数据结构1、简单动态字符串(SDS)SDS结构体定义SDS结构示意图使用SDS的五个优点 2、双端链表(list)链表结构体定义list结构示意图 3、字典(dict)字典结构体定义dict结构…

想要成为 NLP 领域的大牛?从 ChatGPT 的 5 大自然语言模型开始了解吧(LM、Transformer、GPT、RLHF、LLM)——小白也能看得懂

目录 前言ChatGPT基础科普——知其一点所以然1. LM2. Transformer3. GPT4. RLHF5. LLM 参考资料其它资料下载 前言 如果想在自然语言处理(Natural Language Processing,NLP)领域内脱颖而出,那么你一定不能错过 ChatGPT 的 5 大自然…

软件设计师笔记

软件设计师笔记 计算机组成与体系结构 数据的表示、计算机结构、Flynn分类法、CISC与RISC、流水线技术、存储系统、总线系统、可靠性、校验码 1. 数据的表示 (一)进制转换 R进制转十进制使用按权展开法: 十进制转R进制使用短除法 二进制…

Python——狂肝两万字带你学会【类与对象】

目录 01-初始对象 生活中的数据组织 程序中的数据组织​ 使用对象组织数据 总结01 02-类的成员方法 类的定义和使用 成员变量和成员方法 成员方法的定义语法 注意事项 成员方法——代码演示 总结02 03-类和对象 现实世界的事物和类 类和对象 使用类和对象描述…

Java 基础进阶篇(三)—— 权限修饰符、final 关键字与枚举

文章目录 一、权限修饰符二、final 关键字2.1 final 作用2.2 final 修饰变量举例2.3 常量 三、枚举3.1 枚举的格式3.2 枚举的特征3.3 枚举的应用 一、权限修饰符 权限修饰符 用于约束成员变量、构造器、方法等的访问范围。 权限修饰符: 有四种作用范围由小到大 (p…

vue+element 多选级联选择器自定义props

前言 我这里分享的是Cascader 级联选择器中的多选、以及如何自定义props的使用详解 1.使用Cascader 级联选择器 效果 代码 <div class"block"><span class"demonstration">默认显示所有Tag</span><el-cascader:options"op…