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

【LInux网络】socket 编程 - 从ip端口到接口详解

📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

在这里插入图片描述

文章目录

  • 🏳️‍🌈一、socket
    • 1.1、理解源 IP 和目的 IP
    • 1.2 认识端口号
      • 1.2.1 端口号范围划分
      • 1.2.2 理解 "端口号" 和 "进程 ID"
      • 1.2.3 理解源端口号和目的端口号
      • 1.2.4 理解 socket
    • 1.3 网络字节序
    • 1.4 Socket 编程接口
      • 1.4.1 socket 常见 API
    • 1.5 sockaddr 结构
  • 👥总结


🏳️‍🌈一、socket

1.1、理解源 IP 和目的 IP

  • IP 在网络中,用来标识主机的唯一性
  • 注意:后面我们会讲 IP 的分类,后面会详细阐述 IP 的特点

但是这里要思考一个问题:将数据传输到主机是目的吗?

不是的。因为数据是给人用的。比如:聊天是人在聊天,下载是人在下载,浏览网页是人在浏览?但是人是怎么看到聊天信息的呢?怎么执行下载任务呢?怎么浏览网页信息呢?通过启动的 qq,迅雷,浏览器。而启动的 qq,迅雷,浏览器都是进程。换句话说,进程是人在系统中的代表,只要把数据给进程,人就相当于就拿到了数据。

所以:数据传输到主机不是目的,而是手段。到达主机内部,在交给主机内的进程,才是目的。但是系统中,同时会存在非常多的进程,当数据到达目标主机之后,怎么转发给目标进程?

这就要在网络的背景下,在系统中,标识主机的唯一性。

1.2 认识端口号

  • 端口号(port)是传输层协议的内容.
  • 端口号是一个 2 字节 16 位的整数;
  • 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
  • IP 地址 + 端口号能够标识网络上的某一台主机的某一个进程;
  • 一个端口号只能被一个进程占用.

1.2.1 端口号范围划分

  • 0 - 1023: 知名端口号, HTTP, FTP, SSH 等这些广为使用的应用层协议, 他们的端口号都是固定的.
  • 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的.

1.2.2 理解 “端口号” 和 “进程 ID”

我们之前在学习系统编程的时候, 学习了 pid 表示唯一一个进程; 此处我们的端口号也是唯一表示一个进程. 那么这两者之间是怎样的关系?

另外, 一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定;

1.2.3 理解源端口号和目的端口号

传输层协议(TCP 和 UDP)的数据段中有两个端口号, 分别叫做源端口号目的端口号. 就是在描述 “数据是谁发的, 要发给谁”;

1.2.4 理解 socket

  • 综上,IP 地址用来标识互联网中唯一的一台主机port 用来标识该主机上唯一的一个网络进程
  • IP + Port 就能表示 互联网中唯一的一个进程
  • 所以,通信的时候,本质是两个互联网进程代表人来进行通信,{srcIp,srcPort,dstIp,dstPort}这样的 4 元组就能标识互联网中唯二的两个进程
  • 所以,网络通信的本质,也是进程间通信
  • 我们把 ip + port 叫做套接字 socket

1.3 网络字节序

我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分 . 那么如何定义网络数据流的地址呢?

  • 发送主机 通常将发送缓冲区中的数据按内存地址 从低到高 的顺序发出;
  • 接收主机 把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址 从低到高 的顺序保存;

因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址.

TCP/IP 协议规定,网络数据流应采用大端字节序,即低地址高字节.

  • 不管这台主机是大端机还是小端机, 都会按照这个 TCP/IP 规定的网络字节序来发送/接收数据;
  • 如果当前发送主机是小端, 就需要先将数据转成大端; 否则就忽略, 直接发送即可;

为使网络程序具有可移植性,使同样的 C 代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换。

#include <arpa/inet.h>// 将32位无符号整数从主机字节顺序转换为网络字节顺序。
uint32_t htonl(uint32_t hostlong);// 将16位无符号整数从主机字节顺序转换为网络字节顺序。
uint16_t htons(uint16_t hostshort);// 将32位无符号整数从网络字节顺序转换为主机字节顺序。
uint32_t ntohl(uint32_t netlong);// 将16位无符号整数从网络字节顺序转换为主机字节顺序。
uint16_t ntohs(uint16_t netshort);
  • h 表示 host
  • n 表示 network
  • l 表示 32 位长整数
  • s 表示 16 位短整数

1.4 Socket 编程接口

1.4.1 socket 常见 API

1. socket() - 创建一个套接字(socket)(TCP/UDP, 客户端 + 服务器)

#include <sys/types.h>         
#include <sys/socket.h>int socket(int domain, int type, int protocol);

参数

  1. domain:指定协议族(Protocol Family),也称为协议域。常用的协议族有:
    • AF_INET:IPv4 Internet协议。
    • AF_INET6:IPv6 Internet协议。
    • AF_LOCAL(或AF_UNIX):本地通信协议,用于同一台机器上的进程间通信。
    • 其他协议族还包括 AF_ROUTE、AF_AX25、AF_ATMPVC 等,但它们在网络通信中较为少见。
  2. type:指定套接字类型(Socket Type)。常见的套接字类型有:
    • SOCK_STREAM:流式套接字,提供序列化的、可靠的、双向连接的字节流。通常使用TCP协议。
    • SOCK_DGRAM:数据报套接字,支持无连接的、不可靠的和使用固定大小(通常很小)缓冲区的数据报服务。通常使用UDP协议。
    • SOCK_RAW:原始套接字,允许对较低层协议(如IP、ICMP)直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备。
    • 其他类型还包括 SOCK_SEQPACKET、SOCK_RDM、SOCK_PACKET 等,但它们在特定场景下使用。
  3. protocol:指定某个协议的特定类型
    • 通常,当protocol参数为0时,系统会自动选择type类型对应的默认协议。但有些协议可能有多种特定的类型,此时需要设置这个参数来选择特定的类型。

返回值

  • 如果socket函数调用成功,它会返回一个非负的文件描述符(File Descriptor),该描述符唯一标识一个套接字。
  • 如果调用失败,socket函数会返回-1,并设置errno来指示错误原因

2. bind() 将一个套接字(socket)与一个特定的IP地址和端口号绑定在一起。

#include <sys/types.h>          
#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

参数:

  • sockfd:要绑定的套接字的文件描述符。
  • addr:指向包含地址信息的结构体的指针。通常使用struct sockaddr_in表示IPv4地址,或struct sockaddr_in6表示IPv6地址。
  • addrlen:地址结构体的大小。

返回值:

  • 如果bind函数调用成功返回0
  • 如果调用失败返回-1,并设置errno来指示错误原因

1.5 sockaddr 结构

socket API 是一层抽象的网络编程接口,适用于各种底层网络协议 ,如 IPv4、IPv6,以及后面要讲的 UNIX Domain Socket. 然而, 各种网络协议的地址格式并不相同.

在这里插入图片描述
IPv4 和 IPv6 的地址格式定义在 netinet/in.h 中,IPv4 地址用 sockaddr_in 结构体表示,包括 16 位地址类型, 16 位端口号和 32 位 IP 地址.

IPv4、IPv6 地址类型分别定义为常数 AF_INET、AF_INET6.
这样,只要取得某种 sockaddr 结构体的首地址,不需要知道具体是哪种类型的 sockaddr 结构体,就可以根据地址类型字段确定结构体中的内容.

socket API 可以都用 struct sockaddr *类型表示, 在使用的时候需要强制转化成sockaddr_in; 这样的好处是程序的通用性, 可以接收 IPv4, IPv6, 以及 UNIX Domain Socket 各种类型的 sockaddr 结构体指针做为参数;

虽然 socket api 的接口是 sockaddr, 但是我们真正在基于 IPv4 编程时, 使用的数据结构是 sockaddr_in这个结构里主要有三部分信息: 地址类型, 端口号, IP 地址.

in_addr 用来表示一个 IPv4 的 IP 地址. 其实就是一个 32 位的整数


👥总结

本篇博文对 【LInux网络】socket 编程 - 从ip端口到接口详解 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

相关文章:

【LInux网络】socket 编程 - 从ip端口到接口详解

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

MCP:构建大型语言模型与外部系统无缝交互的标准协议架构

目录 引言MCP概述 2.1 MCP的定义2.2 MCP的起源与发展MCP的核心设计原理 3.1 上下文传递与交互3.2 数据安全与隐私保护3.3 统一通信协议MCP架构设计详解 4.1 模块化设计4.2 组件解析 4.2.1 Client Agent4.2.2 Context Manager4.2.3 API Adapter4.2.4 Security Layer4.3 设计原则…...

50常用控件_QPushButton

目录 QPushButton添加图标 QPushButton添加快捷键 代码示例: 按钮的重复触发 使用 QPushButton 表示一个按钮.这也是当前我们最熟悉的一个控件了 OPushButton 继承自 QAbstractButton .这个类是一个抽象类是其他按钮的父类 抽象类 这个类包含了 纯虚函数无法创建出实例(对象…...

Java的ForkJoinPool:深入理解并发编程的利器

在现代软件开发中&#xff0c;多核处理器的普及使得并发编程成为提升应用性能的关键。Java作为一门广泛使用的编程语言&#xff0c;提供了丰富的并发工具&#xff0c;其中ForkJoinPool是Java 7引入的一个强大组件&#xff0c;专为处理可递归分解的任务设计。它通过分治算法和工…...

结合 Python 与 MySQL 构建你的 GenBI Agent_基于 MCP Server

写在前面 商业智能(BI)正在经历一场由大型语言模型(LLM)驱动的深刻变革。传统的 BI 工具通常需要用户学习复杂的界面或查询语言,而生成式商业智能 (Generative BI, GenBI) 则旨在让用户通过自然语言与数据交互,提出问题,并获得由 AI 生成的数据洞察、可视化建议甚至完整…...

道路运输安全员企业负责人考试内容与范围

道路运输企业主要负责人&#xff08;安全员&#xff09;考证要求 的详细说明&#xff0c;适用于企业法定代表人、分管安全负责人等需取得的 《道路运输企业主要负责人和安全生产管理人员安全考核合格证明》&#xff08;交通运输部要求&#xff09;。 考试内容与范围 1. 法律法…...

一体化安全管控平台:消防“一张图”与APP统一管理的创新模式

在科技飞速发展的当下&#xff0c;智慧消防已成为消防救援行业不可阻挡的发展趋势。随着城市化进程的加速&#xff0c;城市规模不断扩大&#xff0c;建筑结构愈发复杂&#xff0c;传统的消防管理模式逐渐暴露出诸多弊端&#xff0c;难以满足现代社会对消防安全的高标准要求。 智…...

利用pnpm patch给第三方库打补丁

如果在使用第三方库的时候, 发现bug, 但是等不了官方补丁, 可以使用pnpm patch给第三方库打补丁来解决, 类似 git diff, 操作如下: 在package.json所在目录的命令行执行 pnpm patch jiaminghi/data-view执行完这个命令后会生成临时文件夹供你编辑, 然后开始编辑这个临时文件夹…...

Spark-SQL(三)

一. 数据加载与保存 1. 数据加载: spark.read.load 是加载数据的通用方法。 spark.read.format("…")[.option("…")].load("…") 1&#xff09;format("…")&#xff1a;指定加载的数据类型。 2&#xff09;load("…"…...

centosu7 二进制安装mysql5.7

一、准备工作 1. 卸载原有MariaDB&#xff08;如有&#xff09; sudo yum remove -y mariadb-libs sudo rm -rf /var/lib/mysql 2. 安装依赖 sudo yum install -y libaio numactl openssl-devel 3. 创建MySQL用户和目录 sudo groupadd mysql sudo useradd -r -g mysql -s…...

生物信息与自动化控制1 - 传感器数据采集与PID 算法的应用

1. 生物过程自动化控制 在生物制药、发酵工程等生物过程中&#xff0c;可以利用生物信息学技术分析生物反应的机理和代谢网络&#xff0c;然后通过自动化控制系统对生物过程进行实时监测和优化控制&#xff0c;以提高生物产品的产量和质量。例如&#xff0c;在发酵过程中&…...

npm包管理工具理解

一、当前维护者&#xff1a;GitHub&#xff08;微软旗下&#xff09; 2018 年&#xff0c;npm 公司被 GitHub 收购&#xff1b; 2020 年&#xff0c;GitHub 被微软收购。 因此&#xff0c;目前 npm 公共仓库由 GitHub 团队负责运维&#xff0c;微软提供底层基础设施支持&#…...

Uniapp 使用Android studio进行离线打包

一.需求 开发Uniapp项目时&#xff0c;使用HBuilderX进行云打包&#xff0c;会经常遇到两个方面的问题&#xff0c;当天的打包的次数受到了限制和打包的时间会比较长&#xff0c;因此&#xff0c;对于离线打包其需求还是比较常见的&#xff0c;这篇文章记录一下对Uniapp的项目…...

mcp和API区别

MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;与传统API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;在技术架构、集成方式和应用场景等方面存在显著差异&#xff0c;以下是主要区别的总结&#x…...

ASP.NET 中 Cache 的常规使用方法

在 ASP.NET 中&#xff0c;Cache 类提供了一种在服务器内存中存储数据的方法&#xff0c;可以显著提高应用程序性能。以下是 Cache 的常规使用方法&#xff1a; 1. 基本缓存操作 添加缓存项 // 最简单的添加方式 Cache["key"] "value";// 使用 Insert …...

TextIn ParseX文档解析参数使用指南(第一期)

TextIn ParseX通用文档解析作为一款适配多样化场景的PDF解析工具&#xff0c;在基础识别能力以上&#xff0c;还提供了便捷、完善的参数配置功能&#xff0c;便于用户根据自身需求调整&#xff0c;获得所需输出结果。在TextIn技术社群&#xff0c;我们的产品团队也经常接到关于…...

[图论]生成树 引言

生成树 引言 生成树&#xff1a;一个连通图的生成树是该图的一个极小连通子图。生成树中含有图中全部(设 V V V个)顶点及构成一棵树的 V − 1 V-1 V−1条边&#xff0c;且生成树中不应有环。最小生成树(MST)&#xff1a;图的所有生成树中&#xff0c;边权之和最小的生成树。显…...

生信小白学Rust-02

基本类型 Rust 每个值都有其确切的数据类型&#xff0c;总的来说可以分为两类&#xff1a;基本类型和复合类型。 基本类型意味着它们往往是一个最小化原子类型&#xff0c;无法解构为其它类型&#xff08;一般意义上来说&#xff09;&#xff0c;由以下组成&#xff1a; 数值…...

Docker Compose 中配置 Host 网络模式

在 Docker Compose 中配置 Host 网络模式时&#xff0c;需通过 network_mode 参数直接指定容器使用宿主机的网络栈。以下是具体配置方法及注意事项&#xff1a; 1. 基础配置示例 在 docker-compose.yml 文件中&#xff0c;为需要启用 Host 模式的服务添加 network_mode: "…...

SQL Server 2022 安装常见问题及解决方法

一、系统要求不满足​ 1. 硬件配置不足​ SQL Server 2022 对硬件有一定要求&#xff0c;若内存、磁盘空间不足&#xff0c;安装可能失败。例如&#xff0c;32 位系统至少需要 1GB 内存&#xff0c;64 位系统至少 2GB&#xff0c;且安装过程需预留足够磁盘空间。​ 解决方法&a…...

解决 AWS RDS MySQL mysqldump 导入sql SET @@GLOBAL 权限不足问题

在使用 mysqldump 导出数据库时&#xff0c;导出的 SQL 文件通常会包含一些 SET 语句&#xff0c;例如 SET MYSQLDUMP, SET SESSION, SET GLOBAL 等&#xff0c;这些语句用于设置会话或全局变量以确保数据一致性和兼容性。然而&#xff0c;在 AWS RDS MySQL 环境中&#xff0c;…...

加油站小程序实战教程11会员注册

目录 1 创建API2 搭建页面布局3 绑定事件总结 上一篇我们介绍了我的页面&#xff0c;显示未开通界面的搭建。当用户点击开通会员时&#xff0c;我们给出弹窗提示用户进行手机号授权&#xff0c;得到手机号之后我们调用API来完成会员的注册。本篇我们介绍一下会员注册的流程。 1…...

基于stm32的手机无线充电研究

标题:基于stm32的手机无线充电研究 内容:1.摘要 随着智能手机的普及&#xff0c;无线充电技术成为了研究热点。本研究的目的是设计并实现基于STM32的手机无线充电系统。采用电磁感应原理&#xff0c;以STM32微控制器为核心控制单元&#xff0c;设计了发射端和接收端电路。通过…...

如何快速隔离被攻击的服务器以防止横向渗透

当发现服务器被攻击时&#xff0c;迅速隔离是防止攻击者横向移动的关键措施。以下是快速隔离服务器的系统化方法&#xff1a; 一、立即网络隔离措施 1. 物理隔离&#xff08;最彻底&#xff09; 直接拔掉服务器的网线&#xff08;对物理服务器&#xff09; 关闭服务器电源&a…...

Ngrok 内网穿透实现Django+Vue部署

目录 Ngrok 配置 注册/登录 Ngrok账号 官网ngrok | API Gateway, Kubernetes Networking Secure Tunnels 直接cmd运行 使用随机生成网址&#xff1a;ngrok http 端口号 使用固定域名生成网址&#xff1a;ngrok http --domain你的固定域名 端口号 Django 配置 1.Youre a…...

信息学奥赛一本通 1508:Easy SSSP

【题目链接】 ybt 1508&#xff1a;Easy SSSP 【题目考点】 1. SPFA算法 判断负环 【解题思路】 使用SPFA统计整个图中是否有负环&#xff0c;初始需要将所有顶点都入队。 可以假想存在一个超级源点&#xff0c;第0号顶点。第0号顶点到第1到第n号顶点都有权值为0的边。 &a…...

兔子桌面官方下载-兔子桌面TV版-安卓电视版官方免费下载新版

想要体验兔子桌面 TV 版带来的诸多便利&#xff0c;下载安装非常简单。以下为你详细介绍官方免费下载新版的步骤&#xff1a; 安卓电视盒子下载方法 确保电视盒子已连接网络&#xff0c;打开盒子自带的浏览器&#xff0c;访问兔子桌面官方网站。 在官网找到 TV 版下载入口&am…...

国标GB28181视频平台EasyCVR视频汇聚系统,打造别墅居民区智能监控体系

一、现状背景 随着国家经济的快速增长&#xff0c;生活水平逐渐提高&#xff0c;私人别墅在城市、乡镇和农村的普及率也在逐年增加。然而&#xff0c;由于别墅区业主经济条件较好&#xff0c;各类不法事件也日益增多&#xff0c;主要集中在以下几个方面&#xff1a; 1&#x…...

天元证券|奶粉行业结构性回暖 乳企竞速全龄化、国际化

在过去几年中&#xff0c;中国婴配粉市场经历了量价齐增&#xff0c;量减价增&#xff0c;量减价减的三个周期。历经多年行业深度洗牌与竞争格局重塑&#xff0c;2024年中国婴配粉市场回暖态势愈发清晰可辨。 日前&#xff0c;包括中国飞鹤、澳优、健合集团在内的多家奶粉股披露…...

JVM:对象的实例化、直接内存

一、对象的实例化 对象实例化步骤&#xff1a; 首先加载对象所属类的相关信息&#xff0c;若该类存在父类&#xff0c;那么要将父类的信息也加载进来&#xff0c;依此类推接着在堆中为对象分配内存&#xff0c;有两种分配方法&#xff1a;当堆内存空间较为规整时&#xff0c;…...

Qwen2.5-Omni 7B 模型部署:镜像下载、环境安装及 demo 启动指南

本文采用docker方式启动 参考&#xff1a;https://github.com/QwenLM/Qwen2.5-Omni 下载模型 modelscope download --model Qwen/Qwen2.5-Omni-7B --local_dir /usr/local/ai/models/Qwen2.5-Omni-7B 下载docker镜像&#xff08;耗时较长&#xff0c;耐心等待&#xff09; d…...

【DeepSeek答】如何成为一名科技领域陪同口译,阶段性学习目标是什么

问&#xff1a;请问我怎样能成为一名陪同口译&#xff1f;需要学习哪些方面&#xff1f;如何阶段性达成目标&#xff1f;我每天晚上可以抽出一个小时学习&#xff0c;周六日全天学习。请帮我具体规划出阶段性的学习路线&#xff0c;并且给出学习教材 DeepSeek答&#xff1a; 根…...

AN(G|C)LE as an OpenCL Compute Driver

AN{G|C}LE as an OpenCL Compute Driver References Vulkanised 2024 https://vulkan.org/events/vulkanised-2024 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/...

在云服务器的 Linux 系统中安装 Python 的步骤(以常见发行版 Ubuntu/CentOS 为例)

一、Ubuntu/Debian 系统安装 Python 1. 更新系统包列表 sudo apt update && sudo apt upgrade -y2. 安装编译依赖 sudo apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev…...

spark-SQL核心编程课后总结

通用加载与保存方式 加载数据&#xff1a;Spark-SQL的 spark.read.load 是通用加载方法&#xff0c;借助 format 指定数据格式&#xff0c;如 csv 、 jdbc 、 json 等&#xff1b; load 用于指定数据路径&#xff1b; option 在 jdbc 格式时传入数据库连接参数。此外&#xff0…...

stm32c011f4烧写程序 could not stop Cortex-M device

stm32c011f4烧写程序 could not stop Cortex-M device 一、问题描述二、问题分析三、解决方案说明&#xff1a;新的问题解决办法 四、其他可能原因分析可能的原因及解决方案&#xff08;一&#xff09;硬件连接问题1、复位引脚&#xff08;NRST&#xff09;状态异常2、 JTAG/SW…...

【Web API系列】Web Shared Storage API之WorkletSharedStorage深度解析与实践指南

前言 在现代Web开发领域&#xff0c;数据存储与隐私保护的矛盾始终存在。传统存储方案如LocalStorage和Cookies面临着日益严格的安全限制&#xff0c;而跨域数据共享的需求却在持续增长。正是在这样的背景下&#xff0c;Web Shared Storage API应运而生&#xff0c;其核心组件…...

nvm切换node版本后,解决npm找不到的问题

解决方法如下 命令行查看node版本 node -v找到node版本所对应的npm版本 点击进入node版本 npm对应版本下载 点击进入npm版本 下载Windows 压缩包 下载完成后&#xff0c;解压&#xff0c;文件改名为npm 复制到你nvm对应版本的node_modules 下面 将下载的npm /bin 目录…...

【路由交换方向IE认证】BGP选路原则之Local Preference属性

文章目录 一、路由器BGP路由的处理过程控制平面和转发平面选路工具 二、BGP的选路顺序选路的前提选路顺序 三、Local Preference属性选路原则Local Preference选路方法Local Preference选路时的方向、方式设置直接更改Local Preference值使用route-map更改Local Preference值 四…...

MTK-Android12 13 屏蔽掉Viewing full screen

去掉ROOM 开机第一次提示全屏弹框 文章目录 需求参考资料修改文件实现方案 解决思路grep 源码查找信息grep 查找 grep -rn "Viewing full screen" 找string 字段grep 查找 grep -rn immersive_cling_title 布局grep 查找 grep -rn layout.immersive_mode_cling 对应的…...

Elasticsearch 查询排序报错总结

Elasticsearch 查询sort报错总结 文章目录 Elasticsearch 查询`sort`报错总结错误1、使用Es对 `sort` 进行排序字段类型的要求1.1、数值类型(如 `integer`、`long`、`float`、`double`)1.2、日期类型(如 `date`)1.3、字符串类型(如 `keyword`、`text`)1.4、布尔类型(`bo…...

Docker私有仓库页面访问实现

通过 docker run -d -p 5000:5000 --name registry registry:2 命令搭建的Docker私有仓库默认不提供网页访问界面。它是一个基于API的后端服务&#xff0c;主要用于镜像的存储和管理。但可以通过以下两种方式实现网页访问&#xff1a; 一、通过第三方Web UI工具扩展 1. 使用 D…...

TVS管与ESD保护二极管详解:原理、区别与应用选型

一、TVS管&#xff08;瞬态电压抑制二极管&#xff09; 1. 基本定义 TVS管&#xff08;Transient Voltage Suppressor&#xff09; 是一种用于抑制瞬态高压脉冲的半导体器件&#xff0c;通过雪崩击穿效应快速钳位电压&#xff0c;保护后端电路。 2. 核心特性参数 参数定义公…...

基于问题解决的Python编程教学对高中学生计算思维能力的培养研究

一、引言 1.1 研究背景与意义 在数字化时代飞速发展的当下&#xff0c;人工智能、大数据、云计算等新兴技术深刻地改变着人们的生活与工作方式。计算思维作为一种运用计算机科学的基础概念进行问题求解、系统设计以及人类行为理解的思维活动&#xff0c;已成为 21 世纪公民必…...

基于Vue Node.js的电影售票网站的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!

摘要 互联网技术的成熟和普及&#xff0c;势必会给人们的生活方式带来不同程度的改变。越来越多的经营模式中都少不了线上运营&#xff0c;互联网正强力推动着社会和经济发展。国人对民族文化的自信和不同文化的包容&#xff0c;再加上电影行业的发展&#xff0c;如此繁荣吸引…...

Golang Event Bus 最佳实践:使用 NSQite 实现松耦合架构

Go Event Bus 最佳实践&#xff1a;使用 NSQite 实现松耦合架构 什么是 Event Bus&#xff1f; Event Bus&#xff08;事件总线&#xff09;是一种消息传递模式&#xff0c;它允许应用程序的不同组件通过发布/订阅机制进行通信&#xff0c;而不需要直接相互依赖。这种模式特别…...

XSS 跨站Cookie 盗取表单劫持网络钓鱼溯源分析项目平台框架

漏洞原理&#xff1a;接受输入数据&#xff0c;输出显示数据后解析执行 基础类型&#xff1a;反射 ( 非持续 ) &#xff0c;存储 ( 持续 ) &#xff0c; DOM-BASE 拓展类型&#xff1a; jquery &#xff0c; mxss &#xff0c; uxss &#xff0c; pdfxss &#xff0c; flashx…...

LeetCode算法题(Go语言实现)_49

题目 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 一、代码实现&#xff08;快速选择…...

运维面试题(十四)

6.将日志从一台服务器保存到另一台服务器中的方法 1.使用 rsync 同步日志文件 2.使用 scp 手动或脚本化传输 3.配置日志服务&#xff08;如 syslog 或 rsyslog &#xff09;远程传输  4.编写脚本定时上传&#xff1a;结合 cron 定时任务和传输工具&#xff0c;编…...

从零开始构建 Ollama + MCP 服务器

Model Context Protocol&#xff08;模型上下文协议&#xff09;在过去几个月里已经霸占了大家的视野&#xff0c;出现了许多酷炫的集成示例。我坚信它会成为一种标准&#xff0c;因为它正在定义工具与代理或软件与 AI 模型之间如何集成的新方式。 我决定尝试将 Ollama 中的一…...