并发网路通信-套接字通信
套接字通信就是网络通信
在网络通信时,客户端和服务器的比例是N:1
服务器如何处理多个客户端的请求
并发处理方式
1.多线程并发处理->线程池并发处理,线程池可以对多个线程进行管理
2.多进程->进程池
3.io多路转接,使用select或者epoch进行处理,使用io转接函数,可以在单线程的情况下处理多个客户端的请求,如果io转接搭配多线程使用就可以大大提高工作效率
4.使用开源框架:livenent开源的网络通信框架,天然支持高并发
客户端业务流程复杂
需要同时进行软件的上传和下载,在这种情况下就需要和服务器端建立多个连接,这样才能提高效率,就可以在客户端创建一个套接字连接池,每个连接对应一个要处理的业务流程,因为发起了多个连接,每个连接都需要处理,这时候就需要使用多线程,因此套接字连接池和多线程是 搭配使用的,同样的,也可以套接字连接池和线程池搭配使用
由于c++里面没有用于通信的套接字类,需要基于c语言的api封装出对应的用于通信的c++类
1.概念
局域网和广域网
局域网:局域网将一定区域内的各种计算机、外部设备和数据库连接起来形成计算机通信的私有网络。
广域网:又称广域网、外网、公网。是连接不同地区局域网或城域网计算机通信的远程公共网络。
ip:网络协议。ip地址用来表示计算机在网络中的地址
端口:用端口来标识进程地址
ip+端口就可以知道是哪台电脑的哪个进程
iso/osi模型
应用层
表示层 应用层
会话层
传输层 传输层 tcp,udp 传输层协议
网络层 网络互联层 ip协议(ipv4,ipv6)
数据链路层 网络接口层 以太网帧协议(底层协议不需要搞明白,只需要搞明白对应的套接字接口怎么去调用,以及套接字通信的流程)
物理层
物理层:负责最后将信息编码成电流脉冲或其它信号用于网上传输
数据链路层:
数据链路层通过物理网络链路供数据传输。
规定了0和1的分包形式,确定了网络数据包的形式;
网络层
网络层负责在源和终点之间建立连接;
此处需要确定计算机的位置,通过IPv4,IPv6格式的IP地址来找到对应的主机
传输层
传输层向高层提供可靠的端到端的网络数据流服务。
每一个应用程序都会在网卡注册一个端口号,该层就是端口与端口的通信
会话层
会话层建立、管理和终止表示层与实体之间的通信会话;
建立一个连接(自动的手机信息、自动的网络寻址);
表示层:
对应用层数据编码和转化, 确保以一个系统应用层发送的信息 可以被另一个系统应用层识别;
网络协议:全世界都认可的在网路通信过程中使用的一种数据的固定通信格式
数据是怎么在计算机之间进行传递的
我们要发送的数据都是应用层的数据,应用层的数据可以使用应用层的协议(比如ftp,http)进行包装,应用层包装好之后继续向下传递就到了传输层,传输层还需要继续进行打包,打包之后还需要再次向下传递就到了网络层,网络层继续向下传递就到了网络接口层,数据再次打包得到一个报文,这个报文通过网口发送给对方,对方计算机接收到这个数据之后,先对网络接口层的这个数据进行解包操作,解出来后就得到了网络层的一个数据包,网络层继续向上传递就到了传输层,数据在传输层解剖继续向上传递到达应用层,就需要由程序员去处理,先看看我们的数据有没有被应用层的协议进行封装,如果封装了,程序员自己把他解开,比如基于http进行解包才能拿到原始数据。但如果没有使用相关协议对应用层数据进行打包,那么我们从传输层拿到数据就是原始数据了,直接处理就可以了
应用层以下,程序员默认情况下不需要做任何处理的,这些都是由内核来完成的,我们只需要把应用层这个数据搞清楚就行了
应用层数据就两种情况:1.不进行数据的打包
2.打包的数据 如果说对应用层的数据进行了封装,接收到这个数据之后需要在应用层把这个数据按照发送端的协议格式再解开就能得到原始数据
在网络通信的时候, 程序猿需要负责的应用层数据的处理(最上层)
应用层的数据可以使用某些协议进行封装, 也可以不封装
程序猿需要调用发送数据的接口函数,将数据发送出去
程序猿调用的API做底层数据处理
传输层使用传输层协议打包数据
网络层使用网络层协议打包数据
网络接口层使用网络接口层协议打包数据
数据被发送到internet
接收端接收到发送端的数据
程序猿调用接收数据的函数接收数据
调用的API做相关的底层处理:
网络接口层拆包 ==> 网络层的包
网络层拆包 ==> 网络层的包
传输层拆包 ==> 传输层数据
如果应用层也 使用了协议对数据进行了封装,数据的包的解析需要程序猿做
套接字通信就是网络通信就是socket通信
socket:研发的一套接口
问题:在发送端把数据封装好后,肯定要把它先存到一块内存中,然后再通过网络进行发送,接收端收到这个数据后,也是要先把数据存到一块内存中,然后再进行解析
如果发送端A和接收端B在内存中存储数据的顺序不一致(比如发送端从低地址位到高地址位存储123456,而接收端可能是654321这样),就会导致在接收端解析不出来发送端相同的数据
所以必须要求两段在内存中处理数据的顺序是一致的,即要制定一个规则,即指定数据在发送过程中的字节序(即数据在内存中的存储顺序)
字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序,也就是说对于单字符来说是没有字节序问题的,字符串是单字符的集合,因此字符串也没有字节序问题。
对于int long这些非单字节结构的数据类型,它们都需要由多个字节才能够组成一个完整的整体
数据在内存中的存储顺序主要有两种,分别是大端(网络字节序)和小端(主机字节序),通常所用的pc机在内存中的存储顺序,就是按照小端的顺序存储的,在进行网络通信的时候,数据是按照大端来存储的,比如在套接字通信的时候发送的数据需要把数据从小端转换成大端进行发送,接收到数据之后,还需要把大端转换成小端在本地主机上进行存储
小端(主机字节序):数据的低位字节存储到低地址位,高位字节存储到高地址位(低低高高)
大端(网络字节序):相反(低高高低)
大小端相互转换的操作函数
#include <arpa/inet.h>
// u:unsigned
// 16: 16位, 32:32位
// h: host, 主机字节序
// n: net, 网络字节序
// s: short
// l: int
//这组函数主要是对16位和32位的整形数进行转换
// 这套api主要用于 网络通信过程中 IP 和 端口 的 转换
// 将一个短整形从主机字节序 -> 网络字节序
uint16_t htons(uint16_t hostshort);
// 将一个整形从主机字节序 -> 网络字节序
uint32_t htonl(uint32_t hostlong); // 将一个短整形从网络字节序 -> 主机字节序
uint16_t ntohs(uint16
相关文章:
并发网路通信-套接字通信
套接字通信就是网络通信 在网络通信时,客户端和服务器的比例是N:1 服务器如何处理多个客户端的请求 并发处理方式 1.多线程并发处理->线程池并发处理,线程池可以对多个线程进行管理 2.多进程->进程池 3.io多路转接,使用select或者epoch进行处理,使用io转接函数…...
STM32N6如何调试下载代码
关键词:STM32N6、调试代码、开发者模式、外部Flash模式 文章目录 前言一、开发者模式调试1.1 CubeIDE调试1.2 IAR调试 二、如何下载代码(外部FLASH模式)2.1 准备工作2.2 编译下载2.2.1 Appli编译头文件下载2.2.2 FSBL编译头文件下载 2.3 运行…...
【2025】Datawhale AI春训营-蛋白质预测(AI+生命科学)-Task2笔记
【2025】Datawhale AI春训营-蛋白质预测(AI生命科学)-Task2笔记 本文对Task2使用的代码进行理解。 任务描述 Task2的任务仍然是通过对反应中包含的蛋白质残基信息,运用深度学习模型构建蛋白质3D结构的隐式模型,从而达成准确预测…...
Python基于知识图谱的医疗问答系统【附源码、文档说明】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
Unreal 从入门到进阶 之 如何实现Pixel Streaming
文章目录 前言核心概念工作原理主要应用场景Pixel Streaming和Pixel Streaming2部署准备编辑器推流打包推流最后前言 Unreal Engine 5 (UE5) 的 Pixel Streaming 是一项基于云端的实时流媒体技术,允许将 UE5 应用的高质量图形渲染结果通过 WebRTC 协议传输到用户的浏览器或轻…...
作业2 CNN实现手写数字识别
# 导入必要库 import numpy as np import matplotlib.pyplot as plt import seaborn as sns # 用于高级可视化 from tensorflow import keras from tensorflow.keras import layers from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay import time # 用于…...
Linux驱动开发--阻塞、非阻塞I/O
2. 阻塞、非阻塞I/O IO 指的是 Input/Output,也就是输入/输出,是应用程序对驱动设备的输入/输出操作。当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到…...
运筹学之模拟退火
目录 一、历史二、精髓思想三、案例与代码实现 一、历史 问:谁在什么时候提出模拟退火?答:模拟退火算法(Simulated Annealing,SA)是由斯图尔特柯尔斯基(Scott Kirkpatrick) 等人在 …...
JavaScript 的演变:2023-2025 年的新特性解析
随着Web技术的飞速发展,ECMAScript(简称ES)作为JavaScript的语言标准,也在不断进化。 本文将带你学习 ECMAScript 2023-2025 的新特性。 一、ECMAScript 2023 新特性 1.1 数组的扩展 Array.prototype.findLast()/Array.protot…...
CSS继承
CSS继承 CSS继承是一种机制,允许子元素自动继承父元素的某些样式属性,从而减少重复代码。 以下是一些常见的具有继承性的CSS属性: color : 文字颜色 font-family : 字体族名称 font-size : 字体大小 font-weight &am…...
游戏引擎学习第236天:GPU 概念概述
回顾并展望通过视频采集卡进行流媒体传输的未来 昨天,我们迈出了大胆的一步,决定初始化硬件的 3D 加速,因为我有点厌倦了我们的游戏没有垂直同步(vsync)。如今,在 Windows 上,我找不到一种可靠…...
HFSS3(limy)——建模学习记录
前言——笔者使用的是21版HFSS 1.基本模型 为什么没有环形的天线 2.创建基本模型方法 常用:先粗略建好模型再编辑输入准确坐标和大小尺寸(这里长方体起始点是左上角下方的点,也就是说要输入模型起点相对于坐标原点的位置尺寸就可以确定具体…...
php实现zip压缩
可以使用ZipArchive类来创建ZIP压缩文件。ZipArchive是PHP内置的一个类,提供了创建、打开、读取、写入和关闭ZIP文件的功能。 示例:压缩单个文件 <?php$fileToZip path/to/your/file.txt; $zipFileName compressed.zip;$zip new ZipArchive(); …...
【STM32单片机】#10 USART串口通信
主要参考学习资料: B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接:https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装:STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 实验&…...
goc命令大全
颜色0黑1红2蓝3浅绿4浅蓝5淡黄6棕7深蓝8灰9粉10深绿11紫12蓝绿13黄14橙15白 绘图命令功能pen笔.fd()前进.rt()右转.c()颜色.up()抬笔.o(,)圆.e(,)椭圆.r(,,)长方形.picL(,)调图片.text(,,)文字.hide()隐藏.moveTo(,)移动wait();等待.soundL()调声音pause();暂停 绘图命令功能…...
Linux | 软件仓库管理
一. 软件包 1.1 软件包的分类 DEB:主要用于基于 Debian 的系统,如 Ubuntu。这种软件包格式具有良好的依赖管理机制,方便用户安装、升级和卸载软件。RPM:广泛应用于 Red Hat、CentOS、Fedora 等系统。RPM 包将软件打包成一个文件…...
Python实现对目标Word文档进行自动化排版【4万字精讲】(14)
前言 本文是该专栏的第14篇,后面会持续分享Python办公自动化干货知识,记得关注。 注意:本文涵盖4万字以及实战操作代码的精讲攻略,带你轻松掌握一键式“文档自动化排版”程序功能。 如果说当你在工作项目中,遇到这样的需求,需要如何处理——假设,现在有大批量的docx格…...
LeetCode每日一题4.19
2563. 统计公平数对的数目 题目 问题分析 输入:一个整数数组 nums 和两个整数 lower 和 upper。 输出:返回满足条件的公平数对的数目,即对于所有 0 < i < j < n,lower < nums[i] nums[j] < upper 的数对 (i, j)…...
Spring AI 开发 - 快速入门
先看效果 项目搭建 Spring AI 是 Spring 推出的一个项目,目标是提供统一的API抽象层,屏蔽不同AI模型和服务的底层差异,实现跨平台兼容性。 演示使用的模型是阿里的 qwq-32b。 环境要求: JDK :17以上(包括…...
leetcode哈希表(六)-三数相加
题目 15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复…...
Photoshop安装与配置--简单攻略版
下载地址:Photoshop软件工具下载 安装完成后,即可运行Photoshop.exe;打开工具页面后,按照下面简单配置即可 1.编辑-》首选项-》常规 或者直接快捷键CtrlK 暂存盘:一定要设置为非C盘 2.性能 3.文件处理 以上配置比较基础…...
一个 CTO 的深度思考
今天和一些同事聊了一会,以下是我的观点 我的观点,成年人只能筛选,不能培养在组织中,应该永远向有结果的人看齐。不能当他站出来讲话的时候,大家还要讨论讨论,他虽然拿到结果了,但是他就是有一…...
Java:使用Maven构建项目无src解决方案
创建箭头所指的包和类以及yml文件: 类中: package com.itheima;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class BigEventApplication …...
Git 命令速查手册
听说用美图可以钓读者? 一、基础操作核心命令 1. 仓库初始化与克隆 命令作用示例git init创建新仓库git init my-projectgit clone克隆远程仓库git clone [https://github.com/user/repo.git](https://github.com/user/repo.git)git remote add关联远程仓库git re…...
office软件中word里面的编号库和列表库功能
在Microsoft Word中,编号库和列表库是两大核心排版工具,分别服务于不同层级的文档结构化需求。以下从功能定义、核心差异、应用场景及操作技巧等维度进行详细解析: 一、编号库(Numbering Library) 1. 定义与功能 编号库是Word中预设或用户自定义的有序列表格式集合,用于…...
C++入门七式——模板初阶
目录 函数模板 函数模板概念 函数模板格式 函数模板的原理 函数模板的实例化 模板参数的匹配原则 类模板 类模板的定义格式 类模板的显式实例化 当面对下面的代码时,大家会不会有一种无力的感觉?明明这些代码差不多,只是因为类型不…...
Python+Selenium+Pytest+POM自动化测试框架封装(完整版)
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、测试框架简介 1)测试框架的优点 代码复用率高,如果不使用框架的话,代码会显得很冗余。可以组装日志、报告、邮件等一…...
matlab 处理海洋数据并画图的工具包--ocean_data_tools
matlab 处理海洋数据并画图的工具包–ocean_data_tools matlab 处理海洋数据并画图的工具包–ocean_data_tools ocean_data_tools 简化了提取、格式化和可视化免费可用的海洋学数据的过程。虽然可以在线访问大量海洋学数据,但由于获取这些数据并将其格式化为可用数据…...
软件开发指南——GUI 开发方案推荐
1. LVGL (Light and Versatile Graphics Library) 适用场景:嵌入式设备、资源受限环境 优势: 专为嵌入式设计的开源 GUI 库,内存占用极小(最低仅需 64KB RAM)支持触摸屏、硬件加速(如 STM32 的 LTDC&…...
JDK8 HashMap的实现原理
一 HashMap底层存储结构 HashMap底层结构采用(数组)(链表 or 红黑树)的形式来存储节点。 首先HashMap是一个数组,而且数组里面每个位置可以放入多个元素,形象一点,咱们把数组的这些个位置称为桶…...
YOLO拓展-锚框(anchor box)详解
一.锚框(anchor box)概述 1.1什么是锚框 锚框就是一种进行预测的像素框,通过遍历输入图像上所有可能的像素框,然后选出正确的目标框,并对位置和大小进行调整就可以完成目标检测任务。 对于yolo锚框的建设须基于实际…...
U-Boot(Universal Bootloader)简介
U-Boot 是一种开源的、高度可定制的 引导加载程序(Bootloader),专为嵌入式系统和特定硬件平台设计。它负责在设备上电后初始化硬件、加载操作系统内核,并将控制权移交给操作系统,是嵌入式设备启动过程中不可或缺的核心…...
turtle库绘制进阶图形
要求: 1.绘制嵌套彩色五角星(大小逐层递减) 2. 设计函数绘制自定义正多边形(边数与颜色参数化) 3. 扩展:实现动态旋转花瓣图案 代码: import turtledef draw_nested_star():colors ["…...
[matlab]南海地形眩晕图代码
[matlab]南海地形眩晕图代码 请ChatGPT帮写个南海地形眩晕图代码 图片 图片 代码 .rtcContent { padding: 30px; } .lineNode {font-size: 12pt; font-family: "Times New Roman", Menlo, Monaco, Consolas, "Courier New", monospace; font-style: n…...
3. 进程概念
目录 1. 冯诺依曼体系结构 2. 操作系统 3. 理解进程的一般思路 4. 查看进程 5. fork初识 6. 进程状态 6.1 一般操作系统 6.2 Linux系统是怎么维护进程状态的 7. 进程优先级 先谈硬件-再谈软件-最后谈进程。 1. 冯诺依曼体系结构 我们常见的计算机(笔记本电…...
yolov8的数据处理lableimg的安装以及使用
视频数据集准备 video cv2.VideoCapture("./BVN.mp4") num 0 # 计数器 save_step 30 # 间隔帧 while True:rel, frame video.read()if not ret:breaknum 1if num % save_step 0:cv2.imwrite("./demo images/" str(num) ".jpg", frame)l…...
小刚说C语言刷题——1035 判断成绩等级
1.题目描述 输入某学生成绩,如果 86分以上(包括 86分)则输出 VERY GOOD ,如果在 60到 85之间的则输出 GOOD (包括 60和 85),小于 60 的则输出 BAD。 输入 输入只有一行,包括 1个整数。 输出 输出只有一行…...
Spring 依赖冲突解决方案详解
引言 在Spring框架中,依赖管理是一个核心功能,它使得开发者能够轻松地管理应用程序中的各种组件和服务。然而,随着项目的增长和复杂度的增加,依赖冲突问题也变得日益常见。本文将详细介绍Spring中不同类型的依赖冲突及其解决方法…...
P11299 [NOISG 2021 Finals] Fraud 题解
题目背景 你被任命为第 24 届全国信息学奥林匹克竞赛的负责人! 题目描述 本次竞赛共有 N 名参赛者和 2 轮比赛。第 i 名参赛者在第一轮获得了分,在第二轮获得了 分。 每轮比赛分别有一个正整数权重 X 和 Y。第 i 名参赛者的最终得分 计算公式为&a…...
AI时代下 你需要和想要了解的英文缩写含义
在AI智能时代下,越来愈多的企业都开始重视并应用以及开发AI相关产品,这个时候都会或多或少的涉及到英文,英文还好,但是如果是缩写,如果我们没有提前了解过,我们往往很难以快速Get到对方的意思。在这里&…...
大数据平台简介
一、分布式系统基础架构 (一)定义与核心特征 分布式系统是由多台计算机(节点)通过网络协作组成的系统,对外表现为一个统一整体。其核心特征包括: 去中心化:节点平等或分角色协作(如…...
电脑端移植至手机平板:攻克难题,仙盟架构显神通——仙盟创梦IDE
在将电脑端应用移植到手机和平板的过程中,常面临诸多棘手问题。像 1.x 号关闭按钮因位置设计欠佳,难以被用户精准点击,字体过小导致阅读与操作不便等。未来之窗仙盟创梦凭借创新的仙盟架构,巧妙且高效地化解了这些困扰开发者与用户…...
基于Python的中国象棋小游戏的设计与实现
基于Python的中国象棋小游戏的设计与实现 第一章 绪论1.1 研究背景1.2 研究意义 第二章 需求分析2.1 需求分析2.1.1核心功能需求2.1.2 用户体验需求2.1.3 衍生功能需求 2.2 可行性分析2.2.1 技术可行性2.2.2 经济可行性2.2.3 市场可行性2.2.4 法律与合规性 第三章 概要设计3.1 …...
HCIP --- OSPF综合实验
一、拓扑图 二、实验要求 1,R5为ISP,其上只能配置IP地址;R4作为企业边界路由器,出口公网地址需要通过PPP协议获取,并进行chap认证。 2,整个0SPF环境IP基于172.16.0.8/16划分。 3,所有设备均可访问R5的环…...
【OpenGL】OpenGL学习笔记-1:VS2019配置OpenGL开发环境
在Visual Studio 2019中可以通过手动配置库文件或NuGet包管理器快速安装的方法配置OpenGL环境,详细步骤如下: 一、打开VS2019,创建新的控制台项目 二、方法一:手动配置GLEW/GLFW/GLAD库 GLFW是窗口管理和输入事件的基础设施&…...
GWAS_LD
局部LDblock 绘图 1. 查看显著位点附近基因情况 链接pvalue显著位点文件 ln -s ~/yiyaoran/GWAS/my_GWAS_J/P3.GWAS/01.tassel/mlm_output.manht_figure.sigSite.out . #也可以自己筛选awk $2 9 && $4 < 0.000028481 mlm_output.manht_input>368_GWAS.snpsnp两…...
WinForms开发基础:实现带X按钮的ClearableTextBox控件
前言 我们经常看到这样的带X按钮的输入框 如果使用WinForms开发中,该如何进行设计,普通的TextBox控件如何进行改造?为了提升用户体验,在TextBox文本框内添加一个“x”按钮,方便用户一键清除内容。本文将介绍如何通过继…...
直线轴承常规分类知多少?
直线轴承的分类方式多样,以下是从材质、结构形状和常规系列三个维度进行的具体分类: 按主要材质分类 外壳材质:常见的有不锈钢,具有良好的耐腐蚀性,适用于一些对环境要求较高、易受腐蚀的工作场景;轴承…...
算法期末复习
算法期末复习 1.单选题 \1. 二分搜索算法是利用( A)实现的算法。 A. 分治策略 B. 动态规划法 C. 贪心法 D. 回溯法 \2. 回溯法解旅行售货员问题时的解空间树时( C ) 。 A. 子集树 B. 深度优先生成树 C. 排序树 D. 广度优先生成树 \3. 下列算法中通常以自底向上的方式求解最…...
LeetCode 5:最长回文子串
1、题目描述 给你一个字符串 s,找到 s 中最长的 回文 子串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s "cbbd" 输出&#…...