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

网络编程套接字

目录

一、认识端口号

二、端口号和进程ID

三、TCP/UDP协议

四、网络字节序

五、socket编程接口 

5.1socket的常见API

5.2socketaddr结构

六、简单的UDP程序

七、地址转换函数

八、简单的TCP网络程序

九、Tcp协议通讯流程 

9.1基于TCP协议的客户端/服务器程序的一般流程 


一、认识端口号

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

二、端口号和进程ID

  • 一个进程可以绑定多个端口号
  • 但是一个端口号不能被多个进程绑定
  • 传输层协议(TCP和UDP)的数据段中有两个端口号,分别叫做源端口号和目的端口号,就是在描述 "数据是谁发的,要 发给谁"

三、TCP/UDP协议

  • 认识TCP协议
  1. 传输层协议
  2. 需要建立连接
  3. 可靠传输数据
  4. 面向字节流
  • 认识UDP
  1. 传输层协议
  2. 不需要建立连接
  3. 可靠传输
  4. 面向数据报

四、网络字节序

  • 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存
  • 网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址
  • TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节
  • 不管这台主机是大端机还是小端机,都会按照这个TCP/IP规定的网络字节序来发送/接收数据
  • 如果当前发送主机是小端,就需要先将数据转成大端,否则就忽略, 直接发送即可
  • 为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换

五、socket编程接口 

5.1socket的常见API

// 创建 socket 文件描述符 (TCP/UDP, 客户端 + 服务器)
int socket(int domain, int type, int protocol);
// 绑定端口号 (TCP/UDP, 服务器)      
int bind(int socket, const struct sockaddr *address, socklen_t address_len);
// 开始监听socket (TCP, 服务器)
int listen(int socket, int backlog);
// 接收请求 (TCP, 服务器)
int accept(int socket, struct sockaddr* address, socklen_t* address_len);
// 建立连接 (TCP, 客户端)
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

5.2socketaddr结构

  • 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结构体指针做为参数
  • sockaddr_in这个结构里主 要有三部分信息: 地址类型,端口号,IP地址
  • in_addr用来表示一个IPv4的IP地址,其实就是一个32位的整数

六、简单的UDP程序

复习Udp Socket · b22f539 · 阿赭/复习 - Gitee.com

七、地址转换函数

  • 字符串转in_addr的函数
#include <arpa/inet.h>
int inet_aton(const char *strptr, struct in_addr *addrptr);
in_addr_t inet_addr(const char *strptr);
int inet_pton(int family, const char *strptr,void *addrptr);
  • in_addr转字符串的函数:
char *inet_ntoa(struct in_addr inaddr);
const char_*inet_ntop(int_family, const void *addrptr, char *strptr,
size t len);
  • 其中inet_pton和inet_ntop不仅可以转换IPv4的in_addr,还可以转换IPv6的in6_addr,因此函数接口是void *addrptr
  • inet_ntoa这个函数返回了一个char*,很显然是这个函数自己在内部为我们申请了一块内存来保存ip的结果,那么是否需要调用者手动释放呢?
  • man手册上说,inet_ntoa函数是把这个返回结果放到了静态存储区,这个时候不需要我们手动进行释放,如果我们调用多次这个函数,会有什么样的效果呢?
  • 因为inet_ntoa把结果放到自己内部的一个静态存储区,这样第二次调用时的结果会覆盖掉上一次的结果
  • inet_ntoa不是线程安全的函数,在多线程环境下,推荐使用inet_ntop,这个函数由调用者提供一个缓冲中区保存结果,可以规避线程安全问题

八、简单的TCP网络程序

socket()打开一个网络通讯端口

如果成功的话,就像open()一样返回一个文件描述符

应用程序可以像读写文件一样用read/write在网络上收发数据

如果socket()调用出错则返回-1

对于IPv4, family参数指定为AF_INET

对于TCP协议,type参数指定为SOCK_STREAM, 表示面向流的传输协议

protocol参数的介绍从略,指定为0即可 

服务器程序所监听的网络地址和端口号通常是固定不变的

客户端程序得知服务器程序的地址和端口号后 就可以向服务器发起连接

服务器需要调用bind绑定一个固定的网络地址和端口号

bind()成功返回0,失败返回-1

bind()的作用是将参数sockfd和myaddr绑定在一起,使sockfd这个用于网络通讯的文件描述符监听 myaddr所描述的地址和端口号

struct sockaddr *是一个通用指针类型,myaddr参数实际上可以接受多种协议的sockaddr结构体,而它们的长度各不相同,所以需要第三个参数addrlen指定结构体的长度

bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr_= htonl(INADDR_ANY);
servaddr.sin port= htons(SERV_PORT);//1.将整个结构体清零;
//2.设置地址类型为AF_INET;
//3.网络地址为INADDR_ANY, 这个宏表示本地的任意IP地址,因为服务器可能有多个网卡,每个网卡也可能绑
定多个IP 地址,这样设置可以在所有的IP地址上监听,直到与某个客户端建立了连接时才确定下来到底用哪个IP 地址;
//4.端口号为SERV_PORT

listen()声明sockfd处于监听状态,并且最多允许有backlog个客户端处于连接等待状态

如果接收到更多的连接请求就忽略,这里设置不会太大(一般是5)

listen()成功返回0,失败返回-1

三次握手完成后,服务器调用accept()接受连接

如果服务器调用accept()时还没有客户端的连接请求,就阻塞等待直到有客户端连接上来

addr是一个传出参数,accept()返回时传出客户端的地址和端口号

如果给addr参数传NULL,表示不关心客户端的地址

addrlen参数是一个传入传出参数(value-result argument),传入的是调用者提供的,缓冲区addr的长度以避免缓冲区溢出问题,传出的是客户端地址结构体的实际长度(有可能没有占满调用者提供的缓冲区) 

客户端需要调用connect()连接服务器

connect和bind的参数形式一致, 区别在于bind的参数是自己的地址,而connect的参数是对方的地址

connect()成功返回0,出错返回-1 

复习Tcp Socket · 5f3c986 · 阿赭/复习 - Gitee.com

  • 由于客户端不需要固定的端口号,因此不必调用bind(),客户端的端口号由内核自动分配 
  •   客户端不是不允许调用bind(), 只是没有必要调用bind()固定一个端口号,否则如果在同一台机器上启动多个客户端,就会出现端口号被占用导致不能正确建立连接
  • 服务器也不是必须调用bind(),但如果服务器不调用bind(),内核会自动给服务器分配监听端口,每次启动服务器时端口号都不一样, 客户端要连接服务器就会遇到麻烦  

九、Tcp协议通讯流程 

9.1基于TCP协议的客户端/服务器程序的一般流程 

  • 服务器初始化:
  1. 调用socket,创建文件描述符
  2. 调用bind,将当前的文件描述符和ip/port绑定在一起,如果这个端口已经被其他进程占用了, 就会bind失败
  3. 调用listen, 声明当前这个文件描述符作为一个服务器的文件描述符,为后面的accept做好准备
  4. 调用accecpt,并阻塞,等待客户端连接过来
  • 建立连接的过程:
  1. 调用socket,创建文件描述符
  2. 调用connect,向服务器发起连接请求,connect会发出SYN段并阻塞等待服务器应答;(第一次)
  3. 服务器收到客户端的SYN,会应答一个SYN-ACK段表示"同意建立连接"(第二次)
  4. 客户端收到SYN-ACK后会从connect()返回,同时应答一个ACK段(第三次)
  • 数据传输的过程:
  1. 建立连接后,TCP协议提供全双工的通信服务,所谓全双工的意思是,在同一条连接中,同一时刻,通信双方可以同时写数据,相对的概念叫做半双工,同一条连接在同一时刻,只能由一方来写数据
  2. 服务器从accept()返回后立刻调 用read(),读socket就像读管道一样,如果没有数据到达就阻塞等待
  3. 这时客户端调用write()发送请求给服务器,服务器收到后从read()返回,对客户端的请求进行处理,在此期间客户端调用read()阻塞等待服务器的应答
  4. 服务器调用write()将处理结果发回给客户端,再次调用read()阻塞等待下一条请求
  5. 客户端收到后从read()返回,发送下一条请求,如此循环下去
  • ​​​​​​​断开连接的过程:
  1. 如果客户端没有更多的请求了,就调用close()关闭连接,客户端会向服务器发送FIN段(第一次)
  2. 此时服务器收到FIN后,会回应一个ACK,同时read会返回0 (第二次);
  3. read返回之后,服务器就知道客户端关闭了连接,也调用close关闭连接,这个时候服务器会向客户端发送 一个FIN (第三次)
  4. 客户端收到FIN,再返回一个ACK给服务器(第四次)

 

相关文章:

网络编程套接字

目录 一、认识端口号 二、端口号和进程ID 三、TCP/UDP协议 四、网络字节序 五、socket编程接口 5.1socket的常见API 5.2socketaddr结构 六、简单的UDP程序 七、地址转换函数 八、简单的TCP网络程序 九、Tcp协议通讯流程 9.1基于TCP协议的客户端/服务器程序的一般流…...

45.matlab产生正弦叠加信号

&#xff0c;...

Java23种设计模式案例

目录 一、概述 二、创建型模式 (Creational Patterns) 单例模式 (Singleton Pattern) 工厂方法模式 (Factory Method Pattern) 抽象工厂模式 (Abstract Factory Pattern) 建造者模式 (Builder Pattern) 原型模式 (Prototype Pattern) 三、结构型模式 (Structu…...

计算机毕业设计程序,定制开发服务

我们擅长的开发语言包括Python、C、Golang、Java&#xff0c;以及前端技术如HTML、CSS、JS和Vue。我们的服务内容丰富&#xff0c;能够满足您各种需求&#xff0c;无论是简单的功能开发还是复杂的定制项目&#xff0c;我们都能为您提供专业支持。若有具体需求可联系作者。 链接…...

AI提示词的种类与适合的任务

以下是提示词的主要种类及其适用任务&#xff0c;基于大模型特性与最佳实践总结&#xff1a; 一、基础提示词 零样本提示&#xff08;Zero-shot Prompting&#xff09; 形式&#xff1a;直接输入任务指令&#xff0c;不提供示例&#xff08;如“翻译以下句子&#xff1a;Hello …...

【Kimi】自动生成PPT-并支持下载和在线编辑--全部免费

【Kimi】免费生成PPT并免费下载 用了好几个大模型&#xff0c;有些能生成PPT内容&#xff1b; 有些能生成PPT&#xff0c;但下载需要付费&#xff1b; 目前只有Kimi生成的PPT&#xff0c;能选择模板、能在线编辑、能下载&#xff0c;关键全部免费&#xff01; 一、用kimi生成PP…...

Maven环境搭建

Maven 1. 概述 ApacheMaven是一个软件项目管理和构建工具。基于项目对象模型&#xff08;POM&#xff09;的概念&#xff0c;Maven可以从中心信息中管理项目的构建、报告和文档 理解: maven构建项目&#xff08;100%&#xff09;而且帮你完成jar的统一管理。 思考: 原来的jar—…...

Vue面试题

Vue面试题 Vue2.0的生命周期&#xff0c;每个生命周期分别做了哪些事情 create阶段&#xff1a;vue实例被创建。 beforeCreate: 创建前&#xff0c;此时data和methods中的数据都还没有初始化&#xff1b; created&#xff1a;创建完毕&#xff0c;data中有值&#xff0c;未…...

Linux时间日期类指令

1、data指令 基本语法&#xff1a; date &#xff1a; 显示当前时间date %Y : 显示当前年份date %m &#xff1a; 显示当前月份date %d &#xff1a; 显示当前哪一天date “%Y-%m-%d %H:%M:%S" &#xff1a; 显示年月日时分秒date -s 字符串时间 &#xff1a; 设置系统时…...

国标28181协议在智联视频超融合平台中的接入方法

一. 国标28181介绍 国标 28181 协议全称是《安全防范视频监控联网系统信息传输、交换、控制技术要求》&#xff0c;是国内视频行业最重要的国家标准&#xff0c;目前有三个版本&#xff1a; 2011 年&#xff1a;推出 GB/T 28181-2011 版本&#xff0c;为安防行业的前端设备、平…...

pyautogui库的screenshot()函数

# 方法一 screenshot pyautogui.screenshot() screenshot.save("screenshot.png")# 方法二 # 获取屏幕分辨率 screen_width, screen_height pyautogui.size()# 截取桌面屏幕 screenshot pyautogui.screenshot(region(0, 0, screen_width, screen_height)) screens…...

python与C系列语言的差异总结(3)

与其他大部分编程语言不一样&#xff0c;Python使用空白符&#xff08;whitespace&#xff09;和缩进来标识代码块。也就是说&#xff0c;循环体、else条件从句之类的构成&#xff0c;都是由空白符加上冒号(:)来确定的。大部分编程语言都是使用某种大括号来标识代码块的。下面的…...

《Linux系统编程篇》System V信号量实现生产者与消费者问题(Linux 进程间通信(IPC))——基础篇(拓展思维)

文章目录 &#x1f4da; **生产者-消费者问题**&#x1f511; **问题分析**&#x1f6e0;️ **详细实现&#xff1a;生产者-消费者****步骤 1&#xff1a;定义信号量和缓冲区****步骤 2&#xff1a;创建信号量****步骤 3&#xff1a;生产者进程****步骤 4&#xff1a;消费者进程…...

Jmeter接口并发测试

Apache JMeter 是一款开源的性能测试工具&#xff0c;广泛用于接口并发测试、负载测试和压力测试。以下是使用 JMeter 进行接口并发测试的详细步骤&#xff1a; 一、准备工作 安装 JMeter 下载地址&#xff1a;Apache JMeter 官网 确保已安装 Java 环境&#xff08;JMeter 依…...

Python--内置函数与推导式(上)

1. 匿名函数 Lambda表达式基础 语法&#xff1a;lambda 参数: 表达式​ 特点&#xff1a; 没有函数名&#xff0c;适合简单逻辑函数体只能是单行表达式自动返回表达式结果 # 示例1&#xff1a;加法 add lambda a, b: a b print(add(3, 5)) # 输出 8# 示例2&#xff1a;字…...

Python爬虫实战:获取六图网漫画图

注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 一、引言 Python 作为一种广泛应用于数据处理和网络爬虫领域的编程语言,拥有丰富的库和框架。其中,Scrapy 框架以其高效、灵活、可扩展等特点,成为构建爬虫程序的…...

《人工智能之高维数据降维算法:PCA与LDA深度剖析》

在人工智能与机器学习蓬勃发展的当下&#xff0c;数据处理成为关键环节。高维数据在带来丰富信息的同时&#xff0c;也引入了计算复杂度高、过拟合风险增大以及数据稀疏性等难题。降维算法应运而生&#xff0c;它能将高维数据映射到低维空间&#xff0c;在减少维度的同时最大程…...

第2课 树莓派镜像的烧录

树莓派的系统通常是安装在SD卡上的‌。SD卡作为启动设备&#xff0c;负责启动树莓派并加载操作系统。这种设计使得树莓派具有便携性和灵活性&#xff0c;用户可以通过更换SD卡来更换操作系统或恢复出厂设置。 烧录树莓派的镜像即是将树莓派镜像烧录到SD卡上&#xff0c…...

网络安全复习资料

网络安全复习资料 1.计算机网络安全是指保持网络中的硬件、软件系统正常运行&#xff0c;使他们不因自然和人为的因素而受到破坏、更改和泄露。 2.网络安全&#xff1a;物理安全&#xff0c;软件安全&#xff0c;信息安全&#xff0c;运行安全。 3.安全防范措施&#xff1a…...

PIG框架学习5——动态路由实现

一、前言 参考PIGX官方文档&#xff1a;https://www.yuque.com/pig4cloud/pig/ggnc3e 1.1 说明 在微服务中&#xff0c;定义路由一般是在网关gateway对应的配置文件中进行定义声明的&#xff0c;PIGX框架下&#xff0c;如何通过动态路由实现网关路由的实时更新&#xff1f; 实…...

vscode设置自动换行

vscode设置自动换行 方法 方法 点击文件->首选项->设置。搜索word wrap -> 选择 on 。 搜索Word Wrap&#xff0c;并把选项改为on。...

Flutter-升级Xcode后构建iOS报错

代码什么都没改动&#xff0c;貌似只是升级了下Xcode&#xff0c;构建iOS就一直报错&#xff0c;错误有时候还不一样。 Swift Compiler Error (Xcode): Unable to rename temporary /Users/admin/Library/Developer/Xcode/DerivedData/ModuleCache.noindex/2ZBFEEPIDQ0EY/Core…...

架构思维:架构的演进之路

文章目录 引言为什么架构思维如此重要架构师的特点软件架构的知识体系如何提升架构思维大型互联网系统架构的演进之路一、大型互联网系统的特点二、系统处理能力提升的两种途径三、大型互联网系统架构演化过程四、总结 引言 在软件开发行业中&#xff0c;有很多技术人可能会问…...

ElasticSearch公共方法封装

业务场景 1、RestClientBuilder初始化&#xff08;同时支持单机与集群&#xff09; 2、发送ES查询请求公共方法封装&#xff08;支持sql、kql、代理访问、集群访问、鉴权支持&#xff09; 3、判断ES索引是否存在&#xff08;/_cat/indices/${indexName}&#xff09; 4、判断ES…...

[Web 信息收集] Web 信息收集 — 手动收集 IP 信息

关注这个专栏的其他相关笔记&#xff1a;[Web 安全] Web 安全攻防 - 学习手册-CSDN博客 0x01&#xff1a;通过 DNS 服务获取域名对应 IP DNS 即域名系统&#xff0c;用于将域名与 IP 地址相互映射&#xff0c;方便用户访问互联网。对于域名到 IP 的转换过程则可以参考下面这篇…...

多源最短路径求解: Floyd-Warshall算法和Johnson 算法

多源最短路径问题是图论中的一个经典问题, 它要求找到图中所有顶点对之间的最短路径. 这个问题可以通过几种不同的算法来解决, 其中最为著名的包括 Floyd-Warshall Algorithm 和 Johnson’s Algorithm. Floyd-Warshall 算法 弗洛伊德-沃沙尔算法(Floyd-Warshall Algorithm) 是…...

解决IDEA使用Ctrl + / 注释不规范问题

问题描述&#xff1a; ctrl/ 时&#xff0c;注释缩进和代码规范不一致问题 解决方式 设置->编辑器->代码样式->java->代码生成->注释代码...

第9章 机器学习与统计模型

这一章重点探讨统计模型和机器学习模型&#xff0c;两个大的主题都建立在数据的基础之上&#xff0c;所以要熟练掌握对数据的处理与分析。实际上&#xff0c;机器学习本身就是统计模型的延伸&#xff0c;是在大数据背景下传统统计方法捉襟见肘了&#xff0c;所以才考虑引入机器…...

基于MATLAB的OFDM通信系统仿真设计

下面将为你详细介绍基于MATLAB的OFDM通信系统仿真设计的步骤和示例代码。 1. OFDM系统原理概述 正交频分复用&#xff08;OFDM&#xff09;是一种多载波调制技术&#xff0c;它将高速数据流通过串并转换&#xff0c;分配到多个正交的子载波上进行传输&#xff0c;这样可以有效…...

WebRTC学习七:WebRTC 中 STUN 协议详解

系列文章目录 第一篇 基于SRS 的 WebRTC 环境搭建 第二篇 基于SRS 实现RTSP接入与WebRTC播放 第三篇 centos下基于ZLMediaKit 的WebRTC 环境搭建 第四篇 WebRTC学习一&#xff1a;获取音频和视频设备 第五篇 WebRTC学习二&#xff1a;WebRTC音视频数据采集 第六篇 WebRTC学习三…...

力扣47. 全排列 II

思路 用 used 保存在一次答案中取过的数组索引。 先对数组进行排序&#xff0c;然后尝试取每个元素作为排列。 首先需要满足不重复取自己&#xff0c;即 !used.contains(i)。其次当前元素和前一个元素不同时可取&#xff0c;即 i 0 || nums[i] ! nums[i - 1]&#xff1b; 如…...

什么是将应用放在边缘服务器上创建?应用不是在用户手机上吗?边缘计算究竟如何优化?通过两个问题来辨析

元宇宙应用虽然可以在用户的手机等终端设备上运行&#xff0c;但大部分的计算和数据处理任务并不是完全在手机上完成的。元宇宙的运行需要庞大的计算资源和大量的数据交互&#xff0c;而这些是手机等终端设备难以独自承担的。因此&#xff0c;元宇宙应用需要借助边缘数据中心等…...

jmeter高级使用场景

JMeter 是一款功能强大的性能测试工具,除了基础的使用方法外,还有许多高级使用技巧,可帮助你更精准、高效地完成复杂的测试任务。以下为你详细介绍一些 JMeter 的高级使用方法: 分布式测试 当需要模拟大量并发用户来对系统进行压力测试时,单台机器的性能可能无法满足要求…...

智能升级、安全加倍,遨游防爆对讲机拉起通信安防线

在充斥着爆炸性气体和易燃物质的危险作业环境中&#xff0c;通信设备的选择关乎生命安全。一旦通信设备引发电火花&#xff0c;其后果将不堪设想。因此&#xff0c;专为防范易燃易爆环境而设计的防爆对讲机&#xff0c;凭借其独特的防爆技术和设计&#xff0c;成为了这些高风险…...

Flutter 上的 Platform 和 UI 线程合并是怎么回事?它会带来什么?

Flutter 在 3.29 发布了一个「重大」调整&#xff1a;从 3.29 开始&#xff0c;Android 和 iOS 上的 Flutter 将在应用的主线程上执行 Dart 代码&#xff0c;并且不再有单独的 Dart UI 线程 也许一些人对于这个概念还比较陌生&#xff0c;有时间可以看看以前发过的 《深入理解…...

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决 问题描述 在使用 IntelliJ IDEA 开发 Spring Boot 应用时&#xff0c;有时即使关闭了应用&#xff0c;程序仍然占用端口&#xff08;例如&#xff1a;4001 端口&#xff09;。这会导致重新启动应用时出现端口被占用的错误&a…...

进程状态(R|S|D|t|T|X|Z)、僵尸进程及孤儿进程

文章目录 一.进程状态进程排队状态&#xff1a;运行、阻塞、挂起 二.Linux下的进程状态R 运行状态&#xff08;running&#xff09;S 睡眠状态&#xff08;sleeping)D 磁盘休眠状态&#xff08;Disk sleep&#xff09;t 停止、暂停状态(tracing stopped)T 停止、暂停状态(stopp…...

Docker 搭建 Gitlab 服务器 (完整详细版)

参考 Docker 搭建 Gitlab 服务器 (完整详细版)_docker gitlab-CSDN博客 Docker 安装 (完整详细版)_docker安装-CSDN博客 Docker 日常命令大全(完整详细版)_docker命令-CSDN博客 1、Gitlab镜像 # 查找Gitlab镜像 docker search gitlab # 拉取Gitlab镜像 docker pull gitlab/g…...

Elasticsearch:使用经过训练的 ML 模型理解稀疏向量嵌入

作者&#xff1a;来自 Elastic Dai Sugimori 了解稀疏向量嵌入&#xff0c;理解它们的作用/含义&#xff0c;以及如何使用它们实现语义搜索。 Elasticsearch 提供语义搜索功能&#xff0c;允许用户使用自然语言进行查询并检索相关信息。为此&#xff0c;目标文档和查询必须首先…...

huggingface部署本地大模型DeepSeek-R1-Distill-Llama-70B使用streamlit构建交互式 Web 应用

文章目录 一、Streamlit介绍二、模型下载三 、模型部署四、效果展示 一、Streamlit介绍 Streamlit 是一个开源的 Python 库&#xff0c;专门用于快速构建和部署交互式 Web 应用程序&#xff0c;尤其适合数据科学和机器学习领域。以下是关于 Streamlit 的详细介绍&#xff1a; …...

中华人民共和国著作权法

目录 中华人民共和国著作权法 第一章 总则 第二章 著作权 第一节 著作权人及其权利 第二节 著作权归属 第三节 权利的保护期 第四节 权利的限制 第三章 著作权许可使用和转让合同 第四章 与著作权有关的权利 第一节 图书、报刊的出版 第二节 表  演 第…...

Maven 从下载到实战:一站式配置与使用指南

一、Maven 简介 Maven 是一款基于 POM&#xff08;Project Object Model&#xff09; 的 Java 项目管理工具&#xff0c;支持依赖管理、构建自动化、标准化项目结构等功能。其核心优势包括&#xff1a; 依赖管理&#xff1a;自动下载和管理第三方库&#xff08;JAR 包&#xf…...

4部署kibana:5601

kibana 是一个基于浏览器页面的Elasticsearch前端展示工具&#xff0c;, 是一个开源和免费的工具 Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面, 可以帮你汇总、分析和搜索重要数据日志 1.安装-所有的es节点 # tar xf kibana-6.4.1-linux-x86_64.t…...

前端项目配置 Nginx 全攻略

在前端开发中&#xff0c;项目开发完成后&#xff0c;如何高效、稳定地将其部署到生产环境是至关重要的一步。Nginx 作为一款轻量级、高性能的 Web 服务器和反向代理服务器&#xff0c;凭借其出色的性能和丰富的功能&#xff0c;成为了前端项目部署的首选方案。本文将详细介绍在…...

Nmap网络安全审计

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Nmap网络安全审计 什么是Nmap Nmap是由Gordon Lyon设计并实现的&#xff0c;于1997开始发布。最初设计Nmap的目的只是希望打造一款强大的端口扫描工具。但是随着…...

deepseek sse流式输出

链接 semi-ui-vue聊天组件 - 可以用这个组件优化界面 sse服务端消息推送 webflux&webclient Hi-Dream-Blog - 参考这个博客&#xff0c;可以在后台将markdown语法转为html 文章目录 链接效果代码pom.xmlDeepSeekControllerWebConfigDeepSeekClientAiChatRequestAiChatM…...

opencv(6): 形态学操作(二值化、自适应阈值、开闭、对比度)

如何在图片中识别出一些物体的位置。具体是什么不是形态学的范畴。 处理方法基本是对二进制图像进行处理。 卷积核决定着图像处理后的效果。 图像二值化 将图像的每个像素变成两种值&#xff0c; 如 0&#xff0c; 255。 全局二值化&#xff1a;全局按照某个阈值二值化 局部…...

P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值--完全 “二叉树” 不一定是 “满二叉树”

P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值 题目分析代码 题目 分析 我吧完全二叉树记成满二叉树了^^ 又卡我几分钟 代码 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <qu…...

Python驱动的餐饮企业智能数据分析:从数据清洗到可视化决策全流程实战

文章目录 Python驱动的餐饮企业智能数据分析:从数据清洗到可视化决策全流程实战引言一、案例背景1.1 需求分析1.2 数据准备1.2.1 模拟数据生成代码二、数据处理全流程2.1 数据清洗2.1.1 缺失值处理2.1.2 异常值检测2.2 核心指标计算2.2.1 营业额分析2.2.2 门店表现评估2.2.3 菜…...

深入理解IP子网掩码子网划分{作用} 以及 不同网段之间的ping的原理 以及子网掩码的区域划分

目录 子网掩码详解 子网掩码定义 子网掩码进一步解释 子网掩码的作用 计算总结表 子网掩码计算 子网掩码对应IP数量计算 判断IP是否在同一网段 1. 计算步骤 2. 示例 3. 关键点 总结 不同网段通信原理与Ping流程 1. 同网段通信 2. 跨网段通信 网段计算示例 3. P…...