当前位置: 首页 > news >正文

03 网络编程 TCP传输控制协议

目录

1、TCP基本特征

2、TCP通信流程基本原理

(1)基本原理

(2)TCP通信代码实现

(3)核心API解析

1)地址绑定--bind

2)设置监听-listen

3)等待连接请求-accept-产生一个已连接套接字

4)发起连接请求--connect

3、服务器广播


  

         TCP全称 Transmition Control Protocol,即:传输控制协议。是面向连接的协议。通常,TCP 通信还会被冠以 可靠传输协议 的头衔。

        但请注意,这里的可靠并非指发出去的数据对方一定能收到(这是不可能的),而仅指TCP能使发送方可靠地知道对方是否收到了数据。

1、TCP基本特征

  • 有连接:通信双方需要事先连接成功,方可传输数据
  • 有确认:一方收到对端的任何数据,都会给另一方发回执确认
  • 保证数据有序、不重复、丢失会重发
  • 如果网络拥堵,会自动调节发送量
  • 采用帧异步的流式通信方式(即通信双方每次的收发数据量不必相等)

        简单来讲,TCP 类似于打电话,说话前需要花一定的时间接通电话,等到对方接听了之后双方才能开始通信,通信的过程中每个数据的传送,接收方都会给发送方回执确认,断开的时候也会互相通知以便于释放各自相关的资源。可以看出来,TCP 相对于 UDP 而言资源开销更大,提供更丰富的功能,TCP适合用在如下情形:

  • 传输质量要求较高,不能丢失数据
  • 大数据量的通信,以至于通信前后的连接和断开的开销可以忽略不计
  • 用户登录、账户管理等相关的功能

2、TCP通信流程基本原理

(1)基本原理

        TCP的通信流程跟打电话是几乎一样的,因此可以将通信的过程细分为主动发起连接者(客户端)和被动接受连接者(服务端)两方来分别讨论。

被动的服务端Server

  1. socket:建立TCP套接字sockfd,即通信端点
  2. bind:绑定套接字sockfd与网络地址,即IP+端口
  3. listing:设定套接字sockfd进入被动监听状态,即将套接字设定为监听套接字
  4. accept:静静等待远程客户端的连接请求
  5. 收到连接请求后,得到一个专用于收发数据的连接套接字connfd
  6. 使用连接套接字connfd与客户端通信

主动的客户端Client

  1. socket:建立TCP套接字sockfd,即通信端点
  2. connect:对服务端发起连接请求
  3. 若连接成功,则直接通过套接字sockfd与服务端通信

注意:

  • 在服务端中,监听套接字和连接套接字是严格区分的,不可混用
  • 服务端所绑定的地址(IP+PORT)需要对外公开,否则客户端无法发起连接
  • 客户端在发起连接前一般无需绑定地址,此时系统会为此连接自动分配恰当的地址资源

(2)TCP通信代码实现

        基本C/S代码(Client客户端、Server服务端),要演示TCP的通信过程,只需要写一个服务端和客户端即可,服务端负责建立被动监听套接字,客户端负责主动发起连接。下面通过一个简单的消息反弹服务器(即将客户端发来的消息直接原样反弹回去)来了解TCP通信的基本流程和所涉及的API。

需要用到的头文件

#include <arpa/inet.h>

#include <netinet/in.h>

服务端:Server

客户端:Client

(3)核心API解析

1)地址绑定--bind

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);功能将套接字 sockfd 与指定的IP和端口绑定注意,对于绑定了某个协议套接字的地址,不能重复绑定。
参数sockfd  - 套接字文件描述符addr    - 地址结构体,包含了IP+PORTaddrlen - 地址结构体长度
返回值成功返回 0失败返回-1一般而言,TCP服务端套接字都需要绑定IP和端口,否则客户端无法发起连接。
另外,除非要指定客户端的地址信息,TCP客户端套接字无需绑定IP和端口。核心:使用结构体存放IP + 端口号 + 家族协议
因为使用IPV4 、TCP或者UDP,所有具有专属的结构体类型用来存放
const struct sockaddr *addr:通用类结构体类型
const struct sockaddr_in *addr:TCP和UDP专属类结构体类型struct sockaddr_in
{sa_family_t  sin_family;  /*     Address family       */in_port_t  sin_port;      /*     Port number          */struct in_addr sin_addr;  /*     Internet address     *//* Pad to size of `struct sockaddr'. */ 让专属结构体和通用结构体大小能对齐,起到扩容专属结构体的作用unsigned char  __pad[__SOCK_SIZE__ - sizeof(short int)- sizeof(unsigned short int) - sizeof(struct in_addr)];
};int main()
{//创建服务器的套接字int ser_fd = socket(AF_INET,SOCK_STREAM,0);if(ser_fd == -1){perror("socket ... ");return -1;}//等客户端来连接的流程部署 --- 你怎么让客户端能连你 通缉犯//服务器绑定套接字: 把服务器的IP地址 和端口号 + 家族协议 绑定到外网把你的内网IP转成内存IP// IP地址分为: 公网IP + 内网IP, struct sockaddr_in ser_addr;memset(&ser_addr,0,sizeof(ser_addr));ser_addr.sin_family      = AF_INET;ser_addr.sin_port        = htons(8888);//host主机字节序  network网络字节序ser_addr.sin_addr.s_addr = htonl(INADDR_ANY);//注意不能只绑定一个IP地址,我们电脑是多网卡的,有多个IPif(bind(ser_fd,(struct sockaddr *)&ser_addr,sizeof(ser_addr)) == -1){perror("bind ... ");return -1;}else{printf("服务器绑定套接字成功!\n");}return 0;
}

2)设置监听-listen

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>int listen(int sockfd, int backlog);功能将套接字的状态设置为被动监听状态设定该套接字的最大等待连接数为backlog
参数sockfd - 套接字文件描述符backlog - 等待连接数最大值
返回值成功返回 0失败返回-1    

        套接字被设定为被动监听状态后,该套接字sockfd只能被动接收连接,不能再主动发起连接。

backlog规定的是最大等待连接数,而不是最大连接数,在Linux中,如果backlog被设定为0,实质的最大等待连接数为4,也就是最多允许同时处理4个远端请求。在Linux中,backlog的最大值被限定在文件 /proc/sys/net/core/somaxconn 中。

另外要注意,要将该函数与阻塞等待对端连接的accecpt()区分开:listen()只是设置套接字状态以及设定backlog数目,它本身是不阻塞的,不能望文生义,以为 listen 就是监听等待对方,该函数的名字很容易产生歧义。

3)等待连接请求-accept-产生一个已连接套接字

默认会堵塞--让进程进入睡眠态

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);功能阻塞等待TCP连接请求
参数sockfd  - 套接字文件描述符,服务器套接字addr    - 客户端地址信息结构体,不想查看连接的客户端信息,可设定为NULLaddrlen - 地址结构体长度指针,  不想查看连接的客户端信息,可设定为NULL
返回值成功返回一个新的非负连接套接字描述符-成功连接的客户端套接字,使用其进行通信失败返回-1
详解该函数默认会阻塞等待客户端连接请求当不需要保存客户端地址信息时,后两个参数都可以被设定为NULL成功返回一个新的连接套接字,是专用于与客户端通信的、能收发数据的套接字发送信息:write(客户端的对等套接字)---服务器发送给客户端
接收消息:read(客户端的对等套接字)      accept进入不可中断睡眠态:想让对应进程或者线程退出--pthread_cancel()
客户端调用close()函数的时候退出了,服务器的read()返回0
客户端ctrl+c退出了            

注意:

由 accept() 函数返回的套接字,称为 已连接套接字,这与其第一个参数 sockfd 被动监听套接字 不同

  • 前者专用于与对端进行读/写操作
  • 后者专用于接收对端的连接请求,它们职责分明,不可混用。

4)发起连接请求--connect

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);功能对指定地址的TCP服务端发起连接请求
参数sockfd  - 套接字文件描述符addr    - 服务端地址信息结构体addrlen - 地址结构体长度
返回值成功返回 0失败返回-1该函数会向指定服务器发送连接请求SYN,正常情况下服务器会返回应答ACK和SYN2,
然后该函数再返回一个ACK2给服务器,此过程就是著名的TCP三次握手。
连接的建立是需要一定时间的,在网络环境较差的条件下时间可能会比较长,也就是说 
connect() 函数在网络不通畅的情形下会阻塞。

3、服务器广播

支持多个客户端连接,客户端发的消息,让服务器帮忙妆发,其他客户端都能收到

服务器思路:

相关文章:

03 网络编程 TCP传输控制协议

目录 1、TCP基本特征 2、TCP通信流程基本原理 &#xff08;1&#xff09;基本原理 &#xff08;2&#xff09;TCP通信代码实现 &#xff08;3&#xff09;核心API解析 1&#xff09;地址绑定--bind 2)设置监听-listen 3)等待连接请求-accept-产生一个已连接套接字 4&a…...

1. 数据结构——顺序表的主要操作

1. 内容 顺序表的初始化、插入、删除、按值查找、输出以及其时间复杂度的计算。 2.代码 #include<stdio.h> #include<stdlib.h> //函数结果状态代码 #define OK 1 #define OVERFLOW -2 #define ERROR 0 #define MAXSIZE 100typedef int ElemType; //顺序表每个…...

[openSSL]TLS 1.3握手分析

文章目录 前言一、ECDHE密钥交换二、TLS单向身份认证三、TLS双向身份认证 前言 关于TLS握手网上资料很多&#xff0c;但是有一些写的很不清楚&#xff0c;导致学习时对概念和流程出现混淆&#xff0c;以下是我觉得写得比较清晰和准确的供学习参考。 浅析 TLS&#xff08;ECDHE…...

无人机之螺旋桨的安装与维护

一、安装&#xff1a;正确安装桨叶至关重要。请确保顺时针旋转的桨叶安装在对应的电机上&#xff0c;并使逆时针旋转的桨叶安装在相应的电机上。否则&#xff0c;无人机可能无法正常飞行或失去控制。 二、维护&#xff1a;为了确保无人机的安全及长久使用&#xff0c;请定期检…...

手机设备IP地址切换:方法、应用与注意事项

在当今数字化时代&#xff0c;手机已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐&#xff0c;手机都扮演着重要角色。然而&#xff0c;随着网络环境的日益复杂&#xff0c;有时我们需要切换手机设备的IP地址以满足特定的需求&#xff0c;如保护隐私、绕过地…...

华为HCIP证书好考吗?详解HCIP证书考试难易程度及备考策略!

华为认证体系主要分为三个层次&#xff1a;HCIA(Huawei Certified ICT Associate)&#xff0c;HCIP(Huawei Certified ICT Professional)和HCIE(Huawei Certified Internetwork Expert)。作为中级认证&#xff0c;HCIP证书主要面向具备一定技术基础和项目实践能力的专业人士。在…...

《SPSS零基础入门教程》学习笔记——05.模型入门

文章目录 5.1 回归模型5.2 分类模型5.3 降维和刻度模型5.4 生存分析和时间序列模型 5.1 回归模型 线性回归&#xff08;分析 -> 回归 -> 线性&#xff09;曲线估计&#xff08;分析 -> 回归 -> 曲线估计&#xff09; 二元Logistic回归&#xff08;分析 -> 回归…...

如何用不到一分钟的时间将Excel电子表格转换为应用程序

我们大多数人对电子表格又爱又恨。当企业需要分析数据、为决策过程提供信息并可视化信息时&#xff0c;Excel和Google Sheets是首选。这些文档非常容易创建&#xff0c;它们帮助我们以直接的方式构建相关的想法和适用的数据。除此之外&#xff0c;事情可能会变得一团糟。 对于…...

WordPress 中 cURL 请求出现 504 网关超时错误的解决方法

错误原因 504网关超时错误通常发生在服务器作为网关或代理&#xff0c;不能在规定的时间内得到响应时。在WordPress中&#xff0c;这可能是因为目标服务器响应过慢&#xff0c;或请求的队列过长导致的。 解决方案 首先&#xff0c;您应该检查您的cURL请求是否设置了一个合理的…...

事件和委托的区别

在C#中&#xff0c;事件&#xff08;Event&#xff09;和委托&#xff08;Delegate&#xff09;是紧密相关但具有不同含义的概念。以下是它们的主要区别&#xff1a; 委托&#xff08;Delegate&#xff09;: 委托是一种类型&#xff0c;它表示一个方法的签名&#xff08;即方法…...

低功耗蓝牙协议栈如何学习?

目录 1. 基础知识 1.1 了解BLE基本概念 1.2 阅读BLE规范 2. 实践和开发工具 2.1 使用开发板 2.2 安装开发环境 3. 学习资源 3.1 官方文档和示例 3.2 在线课程和教程 4. 实践项目 4.1 简单项目 4.2 复杂项目 5. 深入理解协议栈 5.1 分析协议栈 5.2 调试和分析 6…...

ROS 2中,CMakeList.txt常见语法

在ROS 2中&#xff0c;CMakeList.txt 文件扮演着配置和管理构建过程的重要角色。这个文件遵循CMake的语法&#xff0c;用于定义如何编译和链接源代码。下面是一些在ROS 2项目CMakeList.txt文件中常见的语法和用法。 1. 基本结构和命令 cmake_minimum_required(VERSION )&…...

使用 prefetchComponents 进行组件预取

title: 使用 prefetchComponents 进行组件预取 date: 2024/8/17 updated: 2024/8/17 author: cmdragon excerpt: 摘要&#xff1a;本文介绍Nuxt.js中的prefetchComponents功能&#xff0c;用于预取组件以提高用户体验。通过在客户端后台下载和缓存组件&#xff0c;确保在用户…...

『 C++ 』IO流

文章目录 IO流概述iostream 的标准对象C流和C标准库I/O函数的同步 sync_with_stdiofstream 文件流文件流的打开标志二进制读写二进制读写的浅拷贝问题文本读写 字符串流注意 IO流概述 流是指数据的有序传输序列,路表示数据从一个地方流向另一个地方的过程,流可以是输入流也可以…...

enhanced Input Action IA_Look中Action value引脚没有分割结构体引脚的选项

UE5系列文章目录 文章目录 UE5系列文章目录前言二、使用步骤解决办法 前言 据说&#xff0c;unreal engine5中准备废弃“项目设置”中“输入”&#xff0c;操作映射&#xff0c;轴映射。取而代之的是&#xff1a; 使用增强的输入动作&#xff08;Enhanced Input Actions&#…...

C# NetworkStream、ConcurrentDictionary、Socket类、SerialPort、局域网IP 和广域网IP

一、NetworkStream 什么是NetworkStream&#xff1f; NetworkStream 是 .NET Framework 中用于在网络上进行数据传输的流类。它属于System.Net.Sockets 命名空间&#xff0c;并提供了通过网络连接进行读写操作的功能。NetworkStream 主要用于处理从网络套接字&#xff08;Soc…...

大模型--学习范式

1. 自监督学习&#xff08;Self-Supervised Learning&#xff09; 概念&#xff1a;自监督学习是一种特殊形式的监督学习&#xff0c;其中标签不是由人工标注的&#xff0c;而是从输入数据本身自动生成的。模型利用这些自动生成的标签进行训练。自监督学习通常用于预训练阶段&…...

Hadoop-yarn-unauthorized 未授权访问漏洞

一、漏洞描述&#xff1a; Hadoop是一款由Apache基金会推出的分布式系统框架&#xff0c;它通过著名的 MapReduce 算法进行分布式处理&#xff0c;Yarn是Hadoop集群的资源管理系统。YARN提供有默认开放在8088和8090的REST API&#xff08;默认前者&#xff09;允许用户直接通过…...

工作流调度系统(DolphinScheduler、Azkaban、Airflow、Oozie 和 XXL-JOB)

文章目录 1. DolphinScheduler1.1 DolphinScheduler介绍1.2 DolphinScheduler优点 2. Azkaban2.1 Azkaban介绍2.2 Azkaban优点 3. Airflow3.1 Airflow介绍3.1 Airflow优点 4. Oozie4.1 Oozie 介绍4.2 Oozie 优点 5. XXL-JOB5.1 XXL-JOB介绍5.2 XXL-JOB优点 6. 总结 1. DolphinS…...

PyTorch 基础学习(5)- 神经网络

系列文章&#xff1a; PyTorch 基础学习&#xff08;1&#xff09; - 快速入门 PyTorch 基础学习&#xff08;2&#xff09;- 张量 Tensors PyTorch 基础学习&#xff08;3&#xff09; - 张量的数学操作 PyTorch 基础学习&#xff08;4&#xff09;- 张量的类型 PyTorch 基础学…...

CI/CD 自动化:最大限度地提高极狐GitLab 群组的“部署冻结”影响

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…...

单元训练10:定时器实现秒表功能-数组方式

蓝桥杯 小蜜蜂 单元训练10&#xff1a;定时器实现秒表功能-数组方式 /** Description:* Author: fdzhang* Email: zfdcqq.com* Date: 2024-08-15 21:58:53* LastEditTime: 2024-08-16 19:07:27* LastEditors: fdzhang*/#include "stc15f2k60s2.h"#define LED(x) …...

国外项目管理软件最佳实践:选型与应用

国内外主流的10款国外项目管理软件对比&#xff1a;PingCode、Worktile、Asana、Trello、Monday.com、ClickUp、Wrike、ProofHub、Zoho Projects、Hive。 在寻找适合的国外项目管理软件时&#xff0c;你是否感到不知从何选择&#xff1f;市场上琳琅满目的选项往往令人眼花缭乱&…...

Angular组件概念

Angular 是一个由 Google 维护的开源前端框架&#xff0c;用于构建单页面应用&#xff08;SPA&#xff09;和移动Web应用。Angular 应用由多个组件&#xff08;Components&#xff09;组成&#xff0c;这些组件是 Angular 应用构建块的基本单位。 1. Angular 组件的基本概念 …...

嵌入式人工智能ESP32(4-PWM呼吸灯)

1、PWM基本原理 PWM&#xff08;Pulse-width modulation&#xff09;是脉冲宽度调制的缩写。脉冲宽度调制是一种模拟信号电平数字编码方法。脉冲宽度调制PWM是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式。所以根据面积等效法则&#xff0c;…...

继承 (上)【C++】

文章目录 继承的定义继承的语法继承权限和继承到子类后父类成员的访问限定符的变化继承到子类后父类成员的访问限定符的变化 子类继承到了父类的什么&#xff1f;继承中的作用域子类和父类之间的赋值转换子类对象可以直接赋值给父类对象&#xff0c;但是父类对象不能直接赋值给…...

WPF打印控件内容

当我们想打印控件内容时&#xff0c;如一个Grid中的内容&#xff0c;可以用WPF中PrintDialog类的PrintVisual()方法来实现 界面如下&#xff1a; XAML代码如下 <Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition Width"300"…...

[C++][opencv]基于opencv实现photoshop算法图像剪切

【测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 //图像剪切 //参数&#xff1a;src为源图像&#xff0c; dst为结果图像, rect为剪切区域 //返回值&#xff1a;返回0表示成功&#xff0c;否则返回错误代码 int imageCrop(InputArray src, OutputArray dst,…...

四十、大数据技术之Kafka3.x(3)

&#x1f33b;&#x1f33b; 目录 一、Kafka Broker1.1 Kafka Broker工作流程1.1.1 Zookeeper 存储的Kafka信息1.1.2 Kafka Broker 总体工作流程1.1.3 Broker 重要参数 1.2 生产经验——节点服役和退役1.2.1 服役新节点1.2.2 退役旧节点 1.3 Kafka 副本1.3.1 副本基本信息1.3.2…...

redis——基本命令

什么是Reids&#xff08;REmote Dictionary Server&#xff09; Redis是现在主流的数据库之一&#xff0c;是一个使用ANSI C编写的开源、包含多种数据结构、支持网络的、基于内存、可选持久性的键值对存储数据。 特性 1.速度快 &#xff1a;Redis的数据全部存储瑜内存中。 …...

pytorch实现单层线性回归模型

文章目录 简述代码重构要点 数学模型、运行结果数据构建与分批模型封装运行测试 简述 python使用 数值微分法 求梯度&#xff0c;实现单层线性回归-CSDN博客 python使用 计算图&#xff08;forward与backward&#xff09; 求梯度&#xff0c;实现单层线性回归-CSDN博客 数值微分…...

智能小家电能否利用亚马逊VC搭上跨境快车?——WAYLI威利跨境助力商家

智能小家电行业在全球化背景下&#xff0c;正迎来前所未有的发展机遇。亚马逊为品牌商和制造商提供的一站式服务平台&#xff0c;为智能小家电企业提供了搭乘跨境快车、拓展国际市场的绝佳机会。 首先&#xff0c;亚马逊VC平台能够帮助智能小家电企业简化与亚马逊的合作流程&am…...

顺丰科技25届秋季校园招聘常见问题答疑及校招网申测评笔试题型分析SHL题库Verify测评

Q&#xff1a;顺丰科技2025届校园招聘面向对象是&#xff1f; A&#xff1a;2025届应届毕业生&#xff0c;毕业时间段为2024年10月1日至2025年9月30日&#xff08;不满足以上毕业时间的同学可以关注顺丰科技社会招聘或实习生招聘&#xff09;。 Q&#xff1a;我可以投递几个岗…...

深入理解 Kibana 配置文件:一份详尽的指南

Kibana 是一个强大的数据可视化平台&#xff0c;它允许用户通过 Elasticsearch 轻松地探索和分析数据。Kibana 的配置文件 kibana.yml 是定制和优化 Kibana 行为的关键。在这篇博客中&#xff0c;我们将深入探讨 kibana.yml 文件中的各个配置项&#xff0c;并提供示例说明。 服…...

算法的学习笔记—链表中倒数第 K 个结点(牛客JZ22)

&#x1f600;前言 在编程过程中&#xff0c;链表是一种常见的数据结构&#xff0c;它能够高效地进行插入和删除操作。然而&#xff0c;遍历链表并找到特定节点是一个典型的挑战&#xff0c;尤其是当我们需要找到链表中倒数第 K 个节点时。本文将详细介绍如何使用双指针技术来解…...

聊聊场景及场景测试

在我们进行测试过程中&#xff0c;有一种黑盒测试叫场景测试&#xff0c;我们完全是从用户的角度去理解系统&#xff0c;从而可以挖掘用户的隐含需求。 场景是指用户会使用这个系统来完成预定目标的所有情况的集合。 场景本身也代表了用户的需求&#xff0c;所以我们可以认为…...

Spring Web MVC入门(中)

1. 请求 访问不同的路径, 就是发送不同的请求. 在发送请求时, 可能会带⼀些参数, 所以学习Spring的请求, 主要 是学习如何传递参数到后端以及后端如何接收. 传递参数, 咱们主要是使⽤浏览器和Postman来模拟&#xff1b; 1.1 传递单个参数 接收单个参数&#xff0c;在Spring MV…...

Django后端架构开发:后台管理与会话技术详解

&#x1f31f; Django后端架构开发&#xff1a;后台管理与会话技术详解 &#x1f539; 后台管理&#xff1a;自定义模型类 Django的后台管理系统提供了强大的模型管理功能&#xff0c;你可以通过自定义模型类来控制模型在后台管理界面的显示和操作。自定义模型类通过继承admin…...

挑战Infiniband, 爆改Ethernet(2)

挑战Infiniband, 爆改Ethernet之物理层 前面说过UE为了挑战Infiniband在AI集群和HPC领域的优势地位&#xff0c;计划爆改以太网技术&#xff0c;以适应AI和HPC集群对高性能、可扩展网络的需求。正如UE联盟关于愿景的说明中宣称的&#xff1a;”提供一个完整的架构&#xff0c;通…...

Postman文件上传接口测试

接口介绍 返回示例 测试步骤 1.添加一个新请求&#xff0c;修改请求名&#xff0c;填写URL&#xff0c;选择请求方式 2.将剩下的media参数放在请求body里&#xff0c;选择form-data&#xff0c;选择key右边的类型为file类型&#xff0c;就会出现选择文件的按钮Select Files&a…...

stm32入门学习14-电源控制

有时候我们的程序中有些触发执行条件&#xff0c;有时这些触发频率很少&#xff0c;我们的程序就一直在循环&#xff0c;这样就很浪费电&#xff0c;我们可以通过PWR电源控制来实现低功耗模式&#xff0c;即只有在触发时才执行程序&#xff0c;其余时间可以关闭一些没必要的设备…...

[C++][opencv]基于opencv实现photoshop算法色相和饱和度调整

【测试环境】 vs2019 opencv4.8.0 【效果演示】 【核心实现代码】 HSL.hpp #ifndef OPENCV2_PS_HSL_HPP_ #define OPENCV2_PS_HSL_HPP_#include "opencv2/core.hpp" using namespace cv;namespace cv {enum HSL_COLOR {HSL_ALL,HSL_RED,HSL_YELLOW,HSL_GREEN,HS…...

Github 2024-08-16Java开源项目日报 Top10

根据Github Trendings的统计,今日(2024-08-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10TypeScript项目1Ruby项目1Apache Dubbo: 高性能的Java开源RPC框架 创建周期:4441 天开发语言:Java协议类型:Apache License 2.0St…...

AI学习记录 - torch 的 matmul和dot的关联,也就是点乘和点积的联系

有用大佬们点点赞 1、两个一维向量点积 &#xff0c;求 词A 与 词A 之间的关联度 2、两个词向量之间求关联度&#xff0c;求 : 词A 与 词A 的关联度 5 词A 与 词B 的关联度 11 词B 与 词A 的关联度 11 词B 与 词B 的关联度 25 刚刚好和矩阵乘法符合&#xff1a; 3、什么是…...

leetcode 885. Spiral Matrix III

题目链接 You start at the cell (rStart, cStart) of an rows x cols grid facing east. The northwest corner is at the first row and column in the grid, and the southeast corner is at the last row and column. You will walk in a clockwise spiral shape to visi…...

mysql windows安装与远程连接配置

安装包在主页资源中 一、安装(此安装教程为“mysql-installer-community-5.7.41.0.msi”安装教程&#xff0c;安装到win10环境) 保持默认选项&#xff0c;点击”Next“。 点开第一行加号展开一路展开找到“MySQL Server 5,7,41 - X64”点击选中点击一下中间只想右侧的箭头看到…...

子网掩码是什么以及子网掩码相关计算

子网掩码 (Subnet Mask) 又称网络掩码 (Netmask)&#xff0c;告知主机或路由设备&#xff0c;地址的哪一部分是网络号&#xff0c;包括子网的网络号部分&#xff0c;哪一部分是主机号部分。 子网掩码使用与IP地址相同的编址格式&#xff0c;即32 bit—4个8位组的32位长格式。…...

仿RabbitMQ实现消息队列

前言&#xff1a;本项目是仿照RabbitMQ并基于SpringBoot Mybatis SQLite3实现的消息队列&#xff0c;该项目实现了MQ的核心功能&#xff1a;生产者、消费者、中间人、发布、订阅等。 源码链接&#xff1a;仿Rabbit MQ实现消息队列 目录 前言&#xff1a;本项目是仿照Rabbi…...

SpringBoot教程(二十三) | SpringBoot实现分布式定时任务之xxl-job

SpringBoot教程&#xff08;二十三&#xff09; | SpringBoot实现分布式定时任务之xxl-job 简介一、前置条件&#xff1a;需要搭建调度中心1、先下载调度中心源码2、修改配置文件3、启动项目4、进行访问5、打包部署&#xff08;上正式&#xff09; 二、SpringBoot集成Xxl-Job1.…...

微前端架构的数据持久化策略与实践

微前端架构通过将一个大型前端应用拆分成多个小型、自治的子应用&#xff0c;提升了开发效率和应用的可维护性。然而&#xff0c;数据持久化作为应用的基础需求&#xff0c;在微前端架构中实现起来面临着一些挑战。本文将详细介绍在微前端架构下实现数据持久化的策略、技术和最…...