三次握手,四次挥手,服务器模型(多进程并发,线程),基于套接字的UDP通信
三次握手:
第一次握手:客户端向服务器发送SYN待确认数据x, 客户端进入SYN_SEND状态 第二次握手:服务器向客户端回传一条ACK应答数据x+1, 同时发送一条SYN待确认数据y,服务器进入SYN_RECV状态 第三次握手:客户端向服务器回传一条ACK应答数据y+1,客户端和服务器同时进入ESTABLISHED状态
四次挥手:
第一次挥手:主动方向被动方发送FIN断开连接请求(FIN x)第二次挥手:被动方向主动方回传一条ACK应答(ACK x+1)第三次挥手:被动方向主动方发送FIN断开连接请求(FIN y)第四次挥手:主动方向被动方回传一条ACK应答(ACK y+1) 注意:当服务器作为主动方断开连接时,在第四次挥手过程中会有一个等待过程(TIME_WAIT),等待时间因操作系统不定
netstat -p | grep “6666”
二、服务器模型
1、循环服务器
int fd = socket();
bind();
listen();
while(1)
{int connfd = accept();while(1){//发送或者接收}close(connfd);
}
close(sockfd);
2、并发服务器
(1)多线程并发服务器
注意:如果在多线程并发服务器中出现公共数据访问时,需要使用同步或者互斥进行资源保护
pthread_t thread;
int fd = socket();
bind();
listen();
while(1)
{int connfd = accept();pthread_create(&thread, NULL, thread_handler, (void *)connfd); pthread_detach(thread); //将线程设置为分离属性,属于非阻塞操作,当线程结束后,资源自动回收
}
close(sockfd);void *thread_handler(void *arg)
{int connfd = (int *)arg;while(1){//发送或者接收 connfdsend(connfd, buf, 64, 0); } close(connfd);
}
(2)多进程并发服务器
注意:使用多进程并发服务器需要注意子进程资源回收的问题
17对应的信号是 SIGCHLD,SIGCHLD 信号是在子进程状态发生改变(如子进程终止、暂停或恢复)时,由操作系统发送给父进程的信号
pid_t pid;
int fd = socket();
bind();
listen();
signal(17, signal_handler);
signal 函数会告知操作系统,当进程接收到 SIGCHLD 信号时,
要调用 signal_handler 函数进行处理
//当进程接收到 SIGCHLD 信号(信号编号为 17)时
,会调用 signal_handler 函数来处理该信号while(1)
{int connfd = accept(); //父进程执行pid = fork() if(pid == 0) //子进程执行{//close(sockfd);while(1){//发送或者接收} close(connfd);}
}
close(sockfd);void signal_handler(int num) //信号处理函数 num表示捕获信号的编号
{wait(NULL);
}
当父进程接收到 SIGCHLD 信号时,会调用 signal_handler 函数,该函数使用 wait(NULL) 来回收子进程的资源,避免子进程成为僵尸进程
三、基于套接字的UDP通信
特点:无连接、是一种不安全可靠,不能保证数据传输准确无误的一种通信方式
通信流程:
客户端:socket() --> sendto()/recvfrom() --> close()服务器:socket() --> bind() --> sendto()/recvfrom() --> close()
1、发送/接收函数
#include <sys/types.h>#include <sys/socket.h>ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);参数:sockfd:数据报套接字buf:发送内容的首地址len:请求发送的字节数flags: 0dest_addr: 接收方地址结构的首地址addrlen:接收方地址结构的长度返回值: 返回成功发送的字节数ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);参数:sockfd:数据报套接字buf:存放接收内容的首地址len:请求接收的字节数flags: 0src_addr: 发送方地址结构的首地址addrlen:发送方地址结构长度的地址 返回值:返回成功接收的字节数发送数据实例:struct sockaddr_in saddr;saddr.sin_family = AF_INET;saddr.sin_port = htons(8888);saddr.sin_addr.s_addr = inet_addr("192.168.6.48");int s_len = sizeof(saddr);sendto(sockfd, "hello", 5, 0, (strcut sockaddr *)&saddr, s_len);
相关文章:
三次握手,四次挥手,服务器模型(多进程并发,线程),基于套接字的UDP通信
三次握手: 第一次握手:客户端向服务器发送SYN待确认数据x, 客户端进入SYN_SEND状态 第二次握手:服务器向客户端回传一条ACK应答数据x1, 同时发送一条SYN待确认数据y,服务器进入SYN_RECV状态 第三次握手:客户端向服…...
通讯录管理小程序
通讯录管理系统 是对c基础语法的巩固,比较简单的一个小程序,重点在于养成良好的c代码习惯。 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C来实现一个通讯录管理系统 下面是一些需要实现的功能: 1. 添加联系人 功能描述&…...
[ESP32:Vscode+PlatformIO]添加第三方库 开源库 与Arduino导入第三方库的区别
前言 PlatformIO与Arduino在添加第三方库方面的原理存在显著差异 在PlatformIO中,第三方库的使用是基于项目(工程)的。具体而言,只有当你为一个特定的项目添加了某个第三方库后,该项目才能使用该库。这些第三方库的文…...
SpringSecurity:授权服务器与客户端应用(入门案例)
文章目录 一、需求概述二、开发授权服务器1、pom依赖2、yml配置3、启动服务端 三、开发客户端应用1、pom依赖2、yml配置3、SecurityConfig4、接口5、测试 一、需求概述 maven需要3.6.0以上版本 二、开发授权服务器 1、pom依赖 <dependency><groupId>org.springfr…...
k8s证书过期怎么更新?
在 Kubernetes 集群中,证书过期可能导致集群不可用,尤其是 API Server、Controller Manager、Scheduler 等组件所使用的证书。为了恢复集群的正常运行,您需要更新这些证书。以下是更新 Kubernetes 证书的基本步骤: 1. 检查证书状…...
【戒抖音系列】短视频戒除-1-对推荐算法进行干扰
如今推荐算法已经渗透到人们生活的方方面面,尤其是抖音等短视频核心就是推荐算法。 【短视频的危害】 1> 会让人变笨,慢慢让人丧失注意力与专注力 2> 让人丧失阅读长文的能力 3> 让人沉浸在一个又一个快感与嗨点当中。当我们刷短视频时&#x…...
VUE 集成企微机器人通知
message-robot 便于线上异常问题及时发现处理,项目中集成企微机器人通知,及时接收问题并处理 企微机器人通知工具类 export class MessageRobotUtil {constructor() {}/*** 发送 markdown 消息* param robotKey 机器人 ID* param title 消息标题* param…...
封装descriptions组件,描述,灵活
效果 1、组件1,dade-descriptions.vue <template><table><tbody><slot></slot></tbody> </table> </template><script> </script><style scoped>table {width: 100%;border-collapse: coll…...
等级保护2.0|网络安全服务
等级保护2.0|网络安全服务 定义 对于国家秘密信息、法人和其他组织及公民专有信息以及公开信息的存储、传输、处理这些信息系统分等级实行安全保护,对信息系统中发生的信息安全时间分等级响应、处置。 思想 对信息安全实行等级化保护和等级化管理 目标 突出重…...
STM32 RTC亚秒
rtc时钟功能实现:rtc模块在stm32内部,由电池或者主电源供电。如下图,需注意实现时仅需设置一次初始化。 1、stm32cubemx 代码生成界面设置,仅需开启时钟源和激活日历功能。 2、生成的代码,需要对时钟进行初始化,仅需…...
H5+CSS+JS制作好看的轮播图
先来看效果 点击下方按钮可以做到平滑切换轮播,轮播图片可以根据自定义随心变化。 先来看一下页面代码结构 <div class"container"><div class"lunbo-wrap"><div id"slide"></div><div class"butto…...
Win10 部署llama Factory 推荐教程和遇到的问题
教程 【大模型微调】使用Llama Factory实现中文llama3微调_哔哩哔哩_bilibili 大模型微调!手把手带你用LLaMA-Factory工具微调Qwen大模型!有手就行,零代码微调任意大语言模型_哔哩哔哩_bilibili 遇到问题解决办法 pytorch gpu国内镜像下载…...
Visual Studio踩过的坑
统计Unity项目代码行数 编辑-查找和替换-在文件中查找 查找内容输入 b*[^:b#/].*$ 勾选“使用正则表达式” 文件类型留空 也有网友做了指定,供参考 !*\bin\*;!*\obj\*;!*\.*\*!*.meta;!*.prefab;!*.unity 打开Unity的项目 注意:只是看࿰…...
idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡
idea如何使用AI编程提升效率-在IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤-卓伊凡 问题 idea编译器 安装copilot AI工具 实际操作 在 IntelliJ IDEA 中安装 GitHub Copilot 插件的步骤如下: 打开 IntelliJ IDEA: 打开你的 IntelliJ IDEA 应用…...
Leetcode 3449. Maximize the Minimum Game Score
Leetcode 3449. Maximize the Minimum Game Score 1. 解题思路2. 代码实现 题目链接:3449. Maximize the Minimum Game Score 1. 解题思路 这一题思路上就是一个二分法,尝试各个score,看看是否可以满足在给定的m次操作限制下,使…...
DeepSeek深度思考:客户端(Android/iOS)架构设计指南
目标读者:中高级开发者、架构师 适用场景:大型复杂应用开发、跨团队协作、长期维护迭代 一、架构设计核心原则 1.模块化(Modularization) 横向拆分:按功能边界划分(如登录、支付、消息模块)纵向…...
智能理解 PPT 内容,快速生成讲解视频
当我们想根据一版 PPT 制作出相对应的解锁视频时,从撰写解锁词,录制音频到剪辑视频,每一个环节都需要投入大量的时间和精力,本方案将依托于阿里云函数计算 FC 和百炼模型服务,实现从 PPT 到视频的全自动转换࿰…...
HTML 颜色值
HTML 颜色值 引言 在网页设计和开发中,颜色是一个重要的元素,它能够影响用户的视觉体验和网站的视觉效果。HTML 颜色值是网页设计中用来指定文本、背景或其他元素颜色的标准。本文将详细介绍 HTML 颜色值的概念、类型、表示方法以及在实际应用中的注意事项。 HTML 颜色值的…...
kafka消费端之消费者协调器和组协调器
文章目录 概述回顾历史老版本获取消费者变更老版本存在的问题 消费者协调器和组协调器新版如何解决老版本问题再均衡过程**第一阶段CFIND COORDINATOR****第二阶段(JOINGROUP)**选举消费组的lcader选举分区分配策略 第三阶段(SYNC GROUP&…...
【C++】解锁<list>的正确姿势
> 🍃 本系列为初阶C的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:[小编的个人主页])小编的个人主页 > 🎀 🎉欢迎大家点赞👍收藏⭐文章 > ✌️ 🤞 …...
【玩转全栈】----Django模板的继承
先赞后看,养成习惯!!! 目录 模板继承的好处 模板继承的语法规则 更新代码 上文中的部门管理页面: 【玩转全栈】----Django制作部门管理页面-CSDN博客 大家会发现,由于定义了多个html文件,多个ht…...
【紫光同创PG2L100H开发板】盘古676系列,盘古100Pro+开发板,MES2L676-100HP
本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com) 一:开发系统介绍 开发系统概述 MES2L676-100HP开发板采用紫光创 logos2系列 FPGA,型号&#x…...
Mac下使用brew安装go 以及遇到的问题
首先按照网上找到的命令进行安装 brew install go 打开终端输入go version,查看安装的go版本 go version 配置环境变量 查看go的环境变量配置: go env 事实上安装好后的go已经可以使用了。 在home/go下新建src/hello目录,在该目录中新建…...
活动预告 |【Part 2】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁
课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动,了解如何更好地在 Microsoft 365 Defen…...
android的DataBinding简介
Android DataBinding 简介 DataBinding 是 Android Jetpack 中的数据绑定库,用于将 UI 组件直接与数据模型绑定,减少模板代码并实现双向数据同步。它通过声明式布局简化 UI 更新逻辑,常用于 MVVM(Model-View-ViewModel࿰…...
基于DeepSeek API和VSCode的自动化网页生成流程
1.创建API key 访问官网DeepSeek ,点击API开放平台。 在开放平台界面左侧点击API keys,进入API keys管理界面,点击创建API key按钮创建API key,名称自定义。 2.下载并安装配置编辑器VSCode 官网Visual Studio Code - Code Editing…...
【DeepSeek】私有化本地部署图文(Win+Mac)
目录 一、DeepSeek本地部署【Windows】 1、安装Ollama 2、配置环境变量 3、下载模型 4、使用示例 a、直接访问 b、chatbox网页访问 二、DeepSeek本地部署【Mac】 1、安装Ollama 2、配置环境变量 3、下载模型 4、使用示例 5、删除已下载的模型 三、DeepSeek其他 …...
vscode预览插件
在左侧列表拓展里搜索 Live Preview 安装,然后在html页面点击右键找到show Preview 结果如下图 然后就可以进行代码开发并实时预览了...
迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-编写应用APP
在应用代码中我们实现如下功能: 当应用程序启动后会获取命令行参数。如果命令行没有参数,LED 灯将循环闪烁;如果命令行带有参数,则根据传输的参数控制 LED 灯的开启或关闭。通过 HdfIoServiceBind 绑定 LED灯的 HDF 服务ÿ…...
在大型语言模型(LLM)框架内Transformer架构与混合专家(MoE)策略的概念整合
文章目录 传统的神经网络框架存在的问题一. Transformer架构综述1.1 transformer的输入1.1.1 词向量1.1.2 位置编码(Positional Encoding)1.1.3 编码器与解码器结构1.1.4 多头自注意力机制 二.Transformer分步详解2.1 传统词向量存在的问题2.2 详解编解码…...
tolua[一]框架搭建,运行example
一.安装tolua https://github.com/topameng/tolua 下载LuaFramework_UGUI的zip 将Assets目录拷贝到项目根目录下 提示确认注册,遇到这个对话框点确定即可 生成如下目录 二.LuaFramework->Build Windows Resource 接下来的目标是将这个main场景跑起来 需要先执行…...
大数据项目4:基于spark的智慧交通项目设计与实现
项目概述 项目直达 www.baiyuntu.com 随着交通数据的快速增长,传统的交通管理方式已无法满足现代城市的需求。交通大数据分析系统通过整合各类交通数据,利用大数据技术解决交通瓶颈问题,提升交通管理效率。本项目旨在通过大数据技术&#…...
Vue 响应式渲染 - 条件渲染
Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue响应式渲染 - 条件渲染 目录 条件渲染 v-if v-if-else 模版template 物流状态显示判断 设置数据 不同状态渲染 总结 条件渲染 v-if 使用Vue条件判断显示和 隐藏。 示例如下: <!DOCTYPE html> …...
活动预告 |【Part1】Microsoft Azure 在线技术公开课:AI 基础知识
课程介绍 参加“Azure 在线技术公开课:AI 基础知识”活动,了解 AI 核心概念。参加我们举办的本次免费培训活动,了解组织如何使用 AI 技术克服实际挑战,以及如何借助 Azure AI 服务构建智能应用程序。本次培训适用于任何对 AI 解决…...
OpenSIPS-Dispatcher模块详解:优化SIP流量分发的利器
在 OpenSIPS 中,dispatcher 模块用于实现负载均衡和故障转移。通过 dispatcher 模块,你可以将 SIP 请求分发到一组后端服务器(如媒体服务器、代理服务器等),并根据配置的算法和策略动态调整分发逻辑。 模块功能使用样…...
深入理解linux中的文件(下)
目录 一、语言级缓冲区和内核级缓冲区 二、C语音中的FILE* fp fopen(“./file.txt”,"w"): 四、理解磁盘结构: 物理结构 逻辑结构 五、未被打开的文件: 六、更加深入理解inode编号怎么找到文件: 七、对路径结构进行…...
Deepseek系列从v3到R易背面经版
deepseek v3 base要点 MTP : Multi-Token Prediction 训练时: 1. 把前一个block中input tokens经过embedding layer和transformer block的输出,进入output head之前的内容记为h,与下一个block的input tokens经过embedding layer输出的内容都…...
SQLAlchemy 的内存消耗
为何要研究SQLAlchemy 的内存消耗问题?因为SQLAlchemy在应用中,绝大多数问题体现在应用人员对SQLAlchemy 的内存消耗问题不认知、不重视、不处理,最终造成整个系统的大问题,使SQLAlchemy 的性能大打折扣,最终影响了SQL…...
Centos Ollama + Deepseek-r1+Chatbox运行环境搭建
Centos Ollama Deepseek-r1Chatbox运行环境搭建 内容介绍下载ollama在Ollama运行DeepSeek-r1模型使用chatbox连接ollama api 内容介绍 你好! 这篇文章简单讲述一下如何在linux环境搭建 Ollama Deepseek-r1。并在本地安装的Chatbox中进行远程调用 下载ollama 登…...
vscode和pycharm的区别
VSCode(Visual Studio Code)和 PyCharm 是两款常用的 Python 开发工具,它们在功能和使用体验上有一些关键区别: 1. 核心定位 VSCode:轻量级、多语言支持的代码编辑器,依靠插件扩展 Python 开发能力。PyCh…...
【0403】Postgres内核 检查(procArray )给定 db 是否有其他 backend process 正在运行
文章目录 1. 给定 db 是否有其他 backend 正在运行1.1 获取 allPgXact[] 索引1.1.1 MyProc 中 databaseId 初始化实现1.2 allProcs[] 中各 databaseId 判断1. 给定 db 是否有其他 backend 正在运行 CREATE DATABASE 语句创建用户指定 数据库名(database-name)时候, 会通过 …...
MySQL 数据库的体系架构
MySQL 数据库的体系架构是其高效、灵活和可扩展性的核心基础。其设计采用 分层模块化 结构,主要分为以下四层: 1. 连接层(Connectors & Connection Pool) 功能:负责处理客户端连接、认证和权限管理。 连接管理&a…...
【C++高并发服务器WebServer】-14:Select详解及实现
本文目录 一、BIO模型二、非阻塞NIO忙轮询三、IO多路复用四、Select()多路复用实现 明确一下IO多路复用的概念:IO多路复用能够使得程序同时监听多个文件描述符(文件描述符fd对应的是内核读写缓冲区),能够提升程序的性能。 Linux下…...
apisix网关ip-restriction插件使用说明
ip-restriction插件可以在网关层进行客户端请求ip拦截。 当然了,一般不推荐使用该方法,专业的事专业工具做。建议有条件,还是上防火墙或者waf来做。 官方文档:ip-restriction | Apache APISIX -- Cloud-Native API Gateway whit…...
15vue3实战-----props和emit传值
15vue3实战-----props和emit传值 1.emit的使用2.配合props实现完整父子通信 vue3中props和emit的使用有点不一样,但万变不离其宗。 1.emit的使用 子组件: <script setup lang"ts"> // 定义触发的事件及其数据类型 const emit defineEmits([update, delete]…...
第二节 docker基础之---镜像构建及挂载
查看当前镜像: [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [rootdocker ~]#很明显docker是咱们新搭建的所以目前还没有镜像 1,搜索镜像: [rootdocker ~]# docker search centos 搜索镜像并过滤是官…...
Android性能优化
Android性能优化 如何优化一个包含大量图片加载的Android应用,以提高性能和用户体验? 优化一个包含大量图片加载的Android应用,可以从以下几个方面入手,以提高性能和用户体验: 选择合适的图片加载库 使用成熟的图片…...
scikit-learn简介
scikit-learn 是一个广泛使用的 Python 库,主要用于 机器学习(ML)。它提供了一些简单高效的工具,适用于 数据挖掘 和 数据分析。scikit-learn 基于 NumPy、SciPy 和 matplotlib 等科学计算库,具有 易于使用的接口 和 高…...
查询已经运行的 Docker 容器启动命令
一、导语 使用 get_command_4_run_container 查询 docker 容器的启动命令 获取镜像 docker pull cucker/get_command_4_run_container 查看容器命令 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock cucker/get_command_4_run_container 容器id或容器名 …...
ssti学习笔记(服务器端模板注入)
目录 一,ssti是什么 二,原理 所谓模板引擎(三列,可滑动查看) 三,漏洞复现 1,如何判断其所属的模板引擎? 2,判断清楚后开始注入 (1)Jinja2&a…...