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

Linux网络编程:套接字

目录

一 前言 

二 源ip地址和目的ip地址

三 认识端口号 

四 理解 "端口号" 和 "进程ID" 

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

六 认识TCP(Transmission Control Protocol)协议

七 UDP((User Datagram Protocol)协议的基本特点

八  网络字节序

九 socket编程接口

1. struct sockaddr  

2. 接口使用


一 前言 

上篇文章主要介绍的是网络通信方面的一些知识,也算是为以后的学习先做一下铺垫。从本章开始我们就要正式进入网络编程的学习了。在开始网络编程之前,我们还需要进行一些准备工作,需要先了解一些概念。


二 源ip地址和目的ip地址

从上篇文章我们知道局域网的通信是靠MAC地址进行的,而不同的局域网(即广域网)的主机之间的通信是靠ip地址进行的,所以 源ip地址即指发送的主机的ip地址,目的ip地址指接收主机的ip地址。就像车辆的始发站和终点站一样,即使中途经过了好多地方,但是一般情况下,终点站是不会变的。


三 认识端口号 

网络通信可以看作是两台主机在通信,不过在通信过程中我们不仅仅需要考虑两台主机之间的数据交互。

网络通信、数据交互说到底都是为用户提供的交互,无论是朋友之间的线上聊天还是网络游戏。在上篇中我们讲到网络协议栈,我们知道网络层和传输层是属于操作系统的,更上层的应用层才是属于用户使用的。

虽然操作系统是由用户操作的,但是在本质上,在操作系统层面,用户的身份是由程序体现的,要实现通信,程序一定是在运行中,也就是 进程。那么在操作系统看来,两台主机进行通信就是通过运行应用层程序进行通信,也就是说是进程在通信和交换数据。

所以网络通信的本质实际上是进程间的通信,只不过是不同主机之间的进程。而端口号,其实就是用来 表示唯一进程的标识符,是传输层协议的內容

所以对当前主机来说,ip地址保证了主机的唯一性,端口号(PORT)保证了主机内进程的唯一性。

🍉:当端口号和IP地址按照如下方式使用就可以标识到 网络中的唯一进程

IP地址:PORT    ,该组合也被称为 socket套接字

端口号(port)是传输层协议的内容.

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

四 理解 "端口号" 和 "进程ID" 

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

进程PID是操作系统内部用于识别和管理进程的标识符,而端口号是在网络通信中用于区分不同服务或进程的标识符。两者有各自不同的作用和用途,并没有直接的关联性.这样做的原因就像协议分层一样降低耦合性


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

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


六 认识TCP(Transmission Control Protocol)协议

 先对TCP的传输控制协议做一个简单的认识

  1. 传输层协议
  2. 有连接。(比如我们打电话的时候,拨打对方的电话号码,对方必须接电话我们才能进行通信)
  3. 可靠传输(中性词)。在传输数据时,TCP会使用各种防止数据丢失或者损坏,但是并不表示TCP传输一定是可靠的。
  4. 面向字节流。指它将应用层传递下来的数据视为一个无结构的字节序列,即字节流。这意味着应用程序通过TCP发送数据时,这些数据可以被视为是连续的比特或字节序列,而不是一个个独立的消息或数据包。

七 UDP((User Datagram Protocol)协议的基本特点

  1. 传输层协议
  2. 无连接。指通信前,双方不需要建立连接。(比如我知道你的邮箱好,不需要你的同一我就可以给你发邮件)
  3. 不可靠传输(中性词)。UDP协议不会保证数据发送的完整性,如果在传输过程中数据出现丢失或者损坏,UDP也不会管,更不会重新发送。例如直播的时候 出现的卡顿模糊等。
  4. 面向数据包。指在传输数据的时候,是将数据视为独立的、不可分割的数据包或数据报进行传输

八  网络字节序

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

先来回忆一下什么是大端和小端,我们以内存中的存储数据为例,长字节数据在内存中存储时,不同的平台可能会有着不同的存储方式。

  1. 大端字节序:数据的高位字节存储在内存的低地址处,低位字节存储在内存的高地址处。
  2. 小端字节序:数据的低位字节存储在内存的低地址处,高位字节存储在内存的高地址处。这里需要注意的是该存储方式并不是将数据倒序存储,而是以字节为单位,从低位数据到高位数据存储到内存的低地址处到高地址处

所以数据的存储方式不同就导致我们在传输数据时读取数据的方式也不同。

使用大端字节序的平台读取数据的时候需要从内存的低地址处开始读到高地址处

小端字节序的平台,读取数据的时候需要从内存的高地址处开始读到低地址处。

所以我们在网络通信中网络字节流的地址就需要有规定 

  • 发送主机通常将发送缓冲区的数据按内存地址从低到高的顺序发出。
  • 接受主机把从网络中接收到的数据也是按照从低到高的顺序保存在接收缓冲区中。

因此我们规定网络字节流的地址应该是 先发出的是低地址,后发出的是高地址。并且TCP/IP协议规定,网络数据流应该采用大端字节序,即低地址处是高位字节。不论当前的主机是大端机还是小端机都要按照TCP/IP规定的这个网络字节序来发送/接收数据。如果当前主机是小端机,那么就需要先将数据转成大端,否则就忽略。因此,大端字节序也称为 网络字节序

经过对上面的对网络字节流的规定,我们现在知道网络中的所有数据都是大端字节序,那么在接收端读取这些数据的时候就按照大端字节序的方式读取,或者对于小端机器先将接受到的数据的存储顺序调整成小端字节序再读取。

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

系统中提供了 主机字节序(Host Byte Order) 和 网络字节序(Network Byte Order) 的转换接口如下:

  • htonl():将32位整数从主机字节序转换为网络字节序("host to network long")。
  • htons():将16位整数从主机字节序转换为网络字节序("host to network short")。
  • ntohl():将32位整数从网络字节序转换为主机字节序("network to host long")。
  • ntohs():将16位整数从网络字节序转换为主机字节序("network to host short")。

如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回; 如果主机是大端字节序,这些 函数不做转换,将参数原封不动地返回。

九 socket编程接口

先见一见一些常见的API(应用程序编程接口,Application Programming Interface)接口

// 创建 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);// 发送报文 (UDP)
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr* dest_addr, socklen_t addrlen);// 接收报文 (UDP)
ssize_t recvfrom(int socket, void* restrict buffer, size_t length, int flags, struct sockaddr* restrict address, socklen_t* restrict address_len);

我们可以看到大部分的接口的参数都包含一个参数类型: struct sockaddr 

1. struct sockaddr  

sockaddr 是一个结构体。套接字通信在设计的时候不仅实现了网络间通信还实现了本机内进程的通信。所以套接字我们通常分为三类:网络套接字 和 原始套接字 域间套接字。

网络套接字 和域间套接字分别用于网络通信和本地(域间)通信。

域间套接字通信可以实现本地进程的通信,与我们之前介绍的管道通信、共享内存通信的功能大致相同。域间通信也可以称为双向管道。其使用起来要比网络套接字简单,因为不需要跨主机进行通信,所以没有IP,也没有端口号的概念。在使用时,只需要提供一个文件的路径,与命名管道听起来是一样的,但是操作是有着区别的。原始套接字通常不是用来做应用级开发的,而是用来做比如一些抓包的软件,它可以让我们直接跳过前面的一些层直接访问底层。

套接字的设计分成了两类,那么使用套接字实现进程通信也分别实现了网络通信和本机通信两种吗?

 实际上不是的,要是设计成两种就太过于麻烦了。既然都是套接字,那么只需要将两种的通信接口统一起来就好了。那么该如何做呢?两种通信所需要的资源都是不一样的。

  • 网络间的通信需要的资源是 IP地址、端口号等资源,所以设计了 struct sockaddr_in 等结构来描述网络通信所需要的资源。
  • 本机间进程的通信需要的资源是 路径名 等资源,所以设计了 struct sockaddr_un 结构体来描述域间通信所需要的资源。

struct sockaddr_in 的前16位是一个宏, AF_INET,struct sockaddr_un 的前16位也是一个宏, AF_UNIX。

既然我们统一了接口,但是不同的通信所需要的资源是不同的,所以同一个接口怎么接收不同类型的资源呢?

 接口既然要接收不同类型的数据,那么就不能将接口的参数设置成 上面的具体的描述的资源的结构体。而且在上面接口参数中,我们也没有看到 struct sockaddr_in struct sockaddr_un 类型的,只有一个 struct sockaddr。下面我们研究一下这个结构体是什么。

我们将他们三个放在一起对比着看,可以发现他们有着共同点,这三个结构体的首16位都是 地址类型。

 地址类型,不同的宏可以区分协议 以及 区分网络通信还是域间通信。

IPv4和IPv6是互联网协议(IP)的两个主要版本,它们定义了如何在网络上定位设备并进行数据包的路由。IPv4使用32位地址,IPv6使用128位地址.

AF_INET 和AF_INET6 都是用来指定IP地址类型的两个常量,AF_INET 用于 IPv4  AF_INET6 用于 IPv6

如果是域间通信则地址类型为AF_UNIX.

8字节填充只是为了结构体对齐等需求,有效内容还是上面三个

 再看看 sockaddr_in 结构体中都是什么 

所以 struct sockaddr实际上是设计出来的一个抽象的中间的结构体,就是为了让接口能接收不同类型的数据资源


2. 接口使用

  1.  在使用该接口的时候,需要先将 struct sockaddr_in* 或者 struct sockaddr_un* 等类型的结构体先强转成 struct sockaddr*然后再传给接口使用。这是因为上面所说的他们的首16位都表示地址类型。
  2. 接口接收到数据之后,会根据 前16 的地址类型来区分协议及通信方式,也会根据地址类型判断出数据的原结构类型,然后将 sockaddr 结构体强转回原结构体类型以获取完成的信息。

简单的UDP接口

学习了上面的知识,我们在演示简单的UDP通信接口前来介绍上述一个接口:int socket()

该接口的作用是 创建一个 通信的端点

成功则返回一个新的socket文件描述符(一个整数),这个描述符用于标识网络连接实际上在操作系统中,套接字操作都是通过文件描述符来实现的

失败返回 -1并设置全局变量 errno以指示错误类型

相当于创建网络通信的一套文件机制,在底层打开一个文件,将文件和网卡顺利关联起来。将来网络通信还要进行读写,这都是从这里读写。

下来看看三个参数:

1、int domain

该参数用于指定一个通信域,它选择将用于通信的协议族。这些家族定义在 <sys/socket.h> 头文件中。目前的格式包括如下:

AF_UNIX(或 AF_LOCAL):本地通信协议族,用于同一台机器上的进程间通信(IPC)。使用文件系统的路径名作为地址。
AF_INET:IPv4 网络协议族,用于通过互联网协议版本4进行通信。这是最常用的类型之一,适用于广域网和局域网中的通信。
AF_INET6:IPv6 网络协议族,用于通过互联网协议版本6进行通信。随着IPv4地址空间的耗尽,越来越多的应用开始支持IPv6。
AF_IPX:Novell IPX 协议族,用于NetWare环境下的网络通信。不过,由于IP逐渐成为主流,这种协议族现在较少见。
AF_PACKET:直接访问低层网络协议。这个选项通常用于需要直接处理数据链路层协议的应用程序,比如网络嗅探器。

2、int type

在创建socket时,type 参数指定 socket 的类型,它决定了通信的语义。当前定义的主要类型包括

  • SOCK_STREAM:提供一个有序、可靠、基于连接的字节流服务。数据被视为无边界的数据流,通常使用TCP协议。这意味着你可以发送和接收任意大小的数据流,并且这些数据将按照发送顺序到达另一端。
  • SOCK_DGRAM:支持无连接的数据报服务,每个数据报都是独立的,具有固定的最大长度,并且不保证送达顺序或可靠性。通常使用UDP协议。这种类型的socket适合于那些对实时性要求较高但对可靠性要求不那么严格的场景。
  • SOCK_RAW:允许直接访问底层网络协议。这类sockets主要用于高级用户、开发者或需要直接处理IP数据包的应用程序。它们可以用来构建自定义的协议或者进行网络研究等。即

 3、int protocol

该参数用来选择协议类型,此参数的选择与第二个参数密切相关。

type 选择了 SOCK_STREAM 此参数就需要传入 IPPROTO_TCP ,即选择了TCP协议

但是实际上我们不用手动使用宏去选择协议,网络通信时,选定type并且只需要使用一种协议时, 该参数可以直接传入 0 ,表示使用默认协议,其实就是操作系统根据前面的参数自动选择最合适的协议


相关文章:

Linux网络编程:套接字

目录 一 前言 二 源ip地址和目的ip地址 三 认识端口号 四 理解 "端口号" 和 "进程ID" 五 理解源端口号和目的端口号 六 认识TCP&#xff08;Transmission Control Protocol&#xff09;协议 七 UDP&#xff08;(User Datagram Protocol&#xff…...

C++八股--6--mysql 日志与并发控制

这里向大家介绍一下数据库基础&#xff1a;共分为以下章节 10前序.日志系统 这是数据库的核心。我放到首页来介绍&#xff0c;给大家一个前置概念&#xff0c;方便进行更好的学习 日志文件我们用来记录事务对数据库更新操作的文件&#xff0c;分为以记录为单位的文件和数据块…...

bc 命令

一.bc 命令概述 bc 是 Linux 系统中一个用于任意精度算术运算的计算器语言&#xff0c;它支持整数和浮点数的计算&#xff0c;还能进行复杂的数学运算。在你给出的代码里&#xff0c;bc 被用来执行数值比较和计算。 二.| bc 和 | bc -l 的作用与功能 1. | bc | 是管道符号&…...

文献分享:CH-CL配对和VL结构域的完整性影响IgG1分泌过程

背景 IgG抗体的CH1结构域通过内质网蛋白质量控制&#xff08;ERQC&#xff09;机制&#xff0c;由分子伴侣BiP介导&#xff0c;控制抗体的组装和分泌。然而&#xff0c;目前尚不清楚这一过程是否需要可变域。2024年5月2日&#xff0c;韩国亚洲大学的研究人员在Frontiersin Mol…...

【vue3】黑马程序员前端Vue3小兔鲜电商项目【八】

黑马程序员前端Vue3小兔鲜电商项目【八】登录页面 登录页面的主要功能就是表单校验和登录登出业务。 账号密码 accountpasswordcdshi0080123456cdshi0081123456cdshi0082123456cdshi0083123456cdshi0084123456cdshi0085123456cdshi0086123456cdshi0087123456cdshi0088123456 …...

spring cloud 与 cloud alibaba 版本对照表

Spring cloud的组件 spring官方提供netflix提供alibaba提供其它注册中心consuleurekanacosapache(zookeeper)、tencent(paloris北极星)负载均衡loadBalancerribbondubbo远程调用openFeignfeigndubbogoogle(grpc)熔断器cricutBreakerhystrixsentinel网关gatewayzuul第一代MSE&a…...

Rockermq的部署与使用(0-1)

​RocketMQ​ 是阿里巴巴开源的一款 ​分布式消息中间件&#xff0c;具有高吞吐、低延迟、高可用等特点&#xff0c;广泛应用于多个领域&#xff0c;包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物…...

基于SpringBoot + HTML 的宠物医院预约管理

宠物医院管理系统&#xff0c;java项目&#xff0c;springboot项目。idea能打开运行。 使用技术&#xff1a;springboot&#xff0c;mybatis&#xff0c;HTML &#xff0c;mysql 5.7 共分为三个角色&#xff1a;系统管理员、医生、用户 功能模块&#xff1a;系统管理&#xff0…...

Python的ArcPy基于Excel表格对大量遥感影像批量重分类

本文介绍基于Python中的ArcPy模块&#xff0c;以Excel表格内的信息&#xff0c;对遥感影像加以重分类的方法。 首先&#xff0c;明确一下本文的需求。现有按照文章ArcPy批量将栅格文件的属性表导出为Excel表格的方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/artic…...

qml显示视频帧(QQuickImageProvider)

一、实现方式 解码视频可以选择:opencv、ffmpeg等。 显示视频可以选择:Qt Multimedia、QQuickImageProvider、ShaderEffect、自定义QQuickItem等。 本文使用opencv解码视频,QQuickImageProvider显示视频。 二、QQuickImageProvider 中,requestImage 和 requestTexture区…...

硬件工程师面试常见问题(13)

第六十一问&#xff1a;电压跟随器问题&#xff08;有待改进&#xff09; 电压跟随器主要用途在哪里&#xff1f; 答&#xff1a;电压跟随器主要用途&#xff1a;一般用于多级放大电路的输入入级、输出级&#xff0c;也可连接两电路&#xff0c;起缓冲作用。 电压跟随器电路连…...

[特殊字符] 专业角度深入讲解:大模型备案(生成式人工智能)

&#x1f3f7;️ 一、什么是大模型备案&#xff1f; 大模型备案是指 大模型产品 在向公众开放及商用之前&#xff0c;经过 国家互联网信息办公室&#xff08;网信办&#xff09; 等监管部门的 备案审批 过程。 ✅ 目的&#xff1a; 加强生成式 AI 服务的合规管理 促进 AI 技…...

机器学习的简单介绍

目录 一、发展历程与学科定位 二、核心研究方向与技术突破 三、技术挑战与瓶颈 四、未来趋势与创新方向 五、应用场景与产业影响 总结与展望 机器学习作为人工智能的核心分支&#xff0c;近年来在理论和应用层面均取得了突破性进展。本文将从发展历程、核心研究方向、…...

多语言笔记系列:Polyglot Notebooks 混合使用多语言并共享变量

混合使用多语言并共享变量 混合使用多种语言(C#、F#、Powershell、SQL、KQL、Python、Html、JavaScript、JavaScript、Mermaind等语言)&#xff0c;是多语言笔记的最大特性&#xff0c;并且支持各语言之间共享变量这一创新功能。 语言及共享变量的支持情况 语言变量共享C#支…...

操作系统结构图

操作系统组成结构 ├── 用户界面&#xff08;外壳&#xff09; │ ├── 图形用户界面&#xff08;GUI&#xff09;: 提供可视化交互&#xff08;如窗口、图标&#xff09; │ └── 命令行界面&#xff08;CLI&#xff09;: 通过文本指令操作&#xff08;如Bash、PowerShe…...

Docker 使用与部署(超详细)

目录 引入 入门使用 部署对比 镜像仓库 命令解释 基础 常见命令 示例 数据卷的使用 数据卷的概念 数据卷的使用 挂载本地目录文件 镜像 结构 Dockerfile 容器网络 部署 DockerCompose 语法 ​编辑 基础命令 引入 当我们在 Linux 上部署一个集成了很多中间件…...

Android第三次面试总结之Java篇补充

一、Array 与 ArrayList 在 Android 中的深度对比与优化 1. 内存模型与性能差异的本质原因 数组&#xff08;Array&#xff09;的内存布局 基本类型数组&#xff08;如 int[]&#xff09;在 Java 中是连续的原始数据块&#xff0c;直接存储值&#xff0c;无额外对象开销&#…...

CVPR2023 | 通过降低对图像块损坏的敏感性来提高视觉Transformer的鲁棒性

Improving Robustness of Vision Transformers by Reducing Sensitivity to Patch Corruptions 摘要-Abstract引言-Introduction相关工作-Related Work降低对Patch损坏的敏感性-Reducing Sensitivity to Patch Corruptions实验-Experiments分析与讨论-Analysis and Discussions…...

NV228NV254固态美光颗粒NV255NV263

NV228NV254固态美光颗粒NV255NV263 美光颗粒固态硬盘技术解析与选购指南 一、美光颗粒技术体系解析 1. 颗粒分类与性能差异 美光颗粒采用独特编号体系&#xff0c;NV254&#xff08;如MT29F8T08GLLBHL4-36QMES&#xff09;代表8Tb TLC颗粒&#xff0c;采用BOS&#xff08;浮…...

LeetCode 1007. 行相等的最少多米诺旋转 题解

示例 输入&#xff1a;tops [2,1,2,4,2,2], bottoms [5,2,6,2,3,2] 输出&#xff1a;2 解释&#xff1a; 图一表示&#xff1a;在我们旋转之前&#xff0c; tops 和 bottoms 给出的多米诺牌。 如果我们旋转第二个和第四个多米诺骨牌&#xff0c;我们可以使上面一行中的每个…...

c盘怎么安全清理---微软电脑管家

1、c盘红了怎么办 问了ai&#xff0c;也是要安装第三方的软件&#xff0c;win自带的不行吗&#xff1f;找找看 2、主角登场 仔细一看确实是官方自带的 3、使用自带工具扫描 4、转移文件到其他的盘 系统应用管理中的工具里面有个可以转移安装的软件到d盘&#xff0c;有一些软…...

C语言----指针入门篇

1. 指针是什么? 指针理解的两个要点: 1. 指针是内存中一个最小单元的编号 也就是地址 2. 平时口语中说的指针 通常指的是指针变量 是用来存放内存地址的变量 下面我将会具体解释上面两个要点 这时我们就不得不提一提内存了 1.1 什么是内存呢? C语言中的内存布局 程序…...

GitHub 趋势日报 (2025年05月03日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1hacksider/Deep-Live-Camreal time face swap and one-click video deepfake with only a single image⭐ 1582⭐ 59337Python2aip…...

Go-Spring 全新版本 v1.1.0

Go-Spring 全新版本 v1.1.0 已于 2025 年发布。该版本具有诸多新特性&#xff0c;具体如下&#xff1a; 命名与结构优化&#xff1a;命名更加符合 Go 规范&#xff0c;模块划分更加合理&#xff0c;核心设计更加简洁。功能增强&#xff1a;突破性地支持统一日志框架&#xff0c…...

JVM——JVM是怎么实现invokedynamic的?

JVM是怎么实现invokedynamic的&#xff1f; 在Java 7引入invokedynamic之前&#xff0c;Java虚拟机&#xff08;JVM&#xff09;在方法调用方面相对较为“僵化”。传统的Java方法调用主要依赖于invokestatic、invokespecial、invokevirtual和invokeinterface这四条指令&#x…...

使用 IDEA + Maven 搭建传统 Spring MVC 项目的详细步骤(非Spring Boot)

搭建Spring MVC项目 第一步&#xff1a;创建Maven项目第二步&#xff1a;配置pom.xml第三步&#xff1a;配置web.xml第四步&#xff1a;创建Spring配置文件第五步&#xff1a;创建控制器第六步&#xff1a;创建JSP视图第七步&#xff1a;配置Tomcat并运行目录结构常见问题解决与…...

洛谷 P1495:【模板】中国剩余定理(CRT)/ 曹冲养猪

【题目来源】 https://www.luogu.com.cn/problem/P1495 https://www.acwing.com/problem/content/225/ 【题目描述】 自从曹冲搞定了大象以后&#xff0c;曹操就开始捉摸让儿子干些事业&#xff0c;于是派他到中原养猪场养猪。可是曹冲满不高兴&#xff0c;于是在工作中马马虎…...

【iOS】 分类 拓展 关联对象

【iOS】 分类 拓展 关联对象 文章目录 【iOS】 分类 拓展 关联对象前言拓展分类分类与拓展的区别分类拓展关联对象哈希表(AssociationsHashMap) 大致工作流程setgetremove 关联对象的释放时机总结 前言 之前讲过有关于类对象的内容,这里学习一下有关于类的分类拓展和关联对象的…...

iview 老版本合并单元格

新版的iview中已经支持了合并单元格了&#xff0c;我的版本比较老&#xff0c;为&#xff1a;"iview": "^3.5.2"。暂不支持。记录一下别的大佬的方法。感觉思路比较活&#xff0c;正在这种思路需要在解决问题的过程中学习。 核心思路&#xff1a;通过rende…...

go语言实现用户管理系统

goweb实现用户管理系统 用户后台管理系统功能描述 登录功能 支持用户通过邮箱密码和密码进行登录。对输入的邮箱和密码进行验证&#xff0c;确保用户信息的正确性。登录成功后&#xff0c;更新用户的今日登录统计信息&#xff0c;并将用户信息存入会话&#xff08;cookie&am…...

普通IT的股票交易成长史--20250504实盘记录

声明&#xff1a;本文章的内容只是自己学习的总结&#xff0c;不构成投资建议。价格行为理论学习可参考简介中的几位&#xff0c;感谢他们的无私奉献。 送给自己的话&#xff1a; 仓位就是生命&#xff0c;绝对不能满仓&#xff01;&#xff01;&#xff01;&#xff01;&…...

SQL手工注入(DVWA)

手工SQL注入攻击的标准思路 Low等级 &#xff08;1&#xff09;判断是否存在注入 &#xff08;2&#xff09;猜解字段个数 &#xff08;3&#xff09;确定字段顺序 &#xff08;4&#xff09;获取当前数据库 &#xff08;5&#xff09;获取当前数据库中的表 &#xff08…...

【LLM】deepseek R1之GRPO训练笔记(持续更新)

note 相关框架对比&#xff1a; 需微调模型且资源有限 → Unsloth&#xff1b;本地隐私优先的小规模推理 → Ollama&#xff1b;复杂逻辑或多模态任务 → SGLang&#xff1b;高并发生产环境 → vLLM 微调SFT和GRPO是确实能学到新知识的四种格式&#xff08;messages、sharegpt…...

序列到序列学习

seq2seq 就是把一个句子翻译到另外一个句子。 机器翻译 给定一个源语言的句子&#xff0c;自动翻译成目标语言这两个句子可以有不同的长度 seq2seq 是一个 Encoder - Decoder 的架构 编码器是一个 RNN &#xff0c; 读取输入句子&#xff08;可以是双向&#xff09; 解码…...

去打印店怎么打印手机文件,网上打印平台怎么打印

在数字化时代&#xff0c;手机已成为我们存储和传输文件的重要工具。然而&#xff0c;当需要将手机中的文件转化为纸质文档时&#xff0c;许多人会面临选择&#xff1a;是前往线下打印店&#xff0c;还是利用线上打印平台&#xff1f;本文将为您解析这两种方式的优劣&#xff0…...

LeetCode每日一题5.4

1128. 等价多米诺骨牌对的数量 问题 问题分析 等价的定义为&#xff1a;两个骨牌 [a, b] 和 [c, d] 等价&#xff0c;当且仅当 (a c 且 b d) 或者 (a d 且 b c)。 思路 标准化骨牌表示&#xff1a; 为了方便比较&#xff0c;我们可以将每个骨牌 [a, b] 标准化为 [min(a…...

前端小练习————表白墙+猜数字小游戏

1&#xff0c;猜数字游戏 实现一个这个样式的 要猜的目标数字 点击重新开始游戏之后&#xff1a; 代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…...

五年级数学知识边界总结思考-上册

目录 一、背景二、过程1.小数乘法和除法小学五年级小数乘除法的知识点、由来、作用与意义解析**一、核心知识点梳理****二、知识点的由来****三、作用与意义****四、教学意义** **总结** 2.位置小学五年级“位置”知识点、由来、作用与意义解析**一、核心知识点梳理****二、知识…...

C与指针——内存操作与动态内存

1、内存常用操作 void* memcpy(void* dst,const void* src,size_t length); \\内存不允许重叠 void* memmove(void* dst,const void* src,size_t length); \\内存允许重叠 int memcmp(const void* dst,const void* src,size_t length); \\相等返回0 void* memset(void* dst,in…...

P3469 [POI 2008] BLO-Blockade

P3469 [POI 2008] BLO-Blockade 题目描述 B 城有 n n n 个城镇&#xff08;从 1 1 1 到 n n n 标号&#xff09;和 m m m 条双向道路。 每条道路连结两个不同的城镇&#xff0c;没有重复的道路&#xff0c;所有城镇连通。 把城镇看作节点&#xff0c;把道路看作边&…...

Linux网络编程 day3 五一结假

基本概念 三次握手 主动发起连接请求端&#xff0c;发送SYN标志位&#xff0c;请求建立连接。携带数据包包号、数据字节数(0)、滑动窗口大小。 被动接收连接请求端&#xff0c;发送ACK标志位&#xff0c;同时携带SYN请求标志位。携带序号、确认序号、数据包包号、数据字节数…...

解释一下NGINX的反向代理和正向代理的区别?

大家好&#xff0c;我是锋哥。今天分享关于【解释一下NGINX的反向代理和正向代理的区别?】面试题。希望对大家有帮助&#xff1b; 解释一下NGINX的反向代理和正向代理的区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 NGINX 作为一个高效的反向代理服务器&a…...

Coco AI 入驻 GitCode:打破数据孤岛,解锁智能协作新可能

在信息爆炸时代&#xff0c;企业正面临前所未有的挑战&#xff1a; 企业数据和信息分散&#xff0c;数据孤岛现象严重&#xff0c;员工往往浪费大量时间跨平台检索&#xff1b;跨部门协作困难&#xff0c;团队因信息隔阂导致项目延期&#xff1b;数据安全问题严峻&#xff0c;…...

【QT】QT中的网络编程(TCP 和 UDP通信)

QT中的网络编程&#xff08;TCP 和 UDP通信&#xff09; 1.tcp1.1 tcp通信1.1.1 相比linux中tcp通信:1.1.2 QT中的tcp通信: 1.2 tcp通信流程1.2.1 服务器流程&#xff1a;1.2.1.1 示例代码1.2.1.2 现象 1.2.2 客户端流程&#xff1a;1.2.2.1 示例代码1.2.2.2 现象&#xff1a; …...

个性化推荐:大数据引领电子商务精准营销新时代

个性化推荐:大数据引领电子商务精准营销新时代 引言 在电子商务的时代,个性化推荐系统已经成为提升用户体验、增强平台竞争力的重要技术。随着大数据技术的迅猛发展,传统的推荐方法已经无法满足用户日益增长的需求。为了精准地把握用户兴趣和消费倾向,商家们依赖大数据分析…...

【前端】【总复习】HTML

一、HTML&#xff08;结构&#xff09; HTML 是网页的骨架&#xff0c;主要负责网页的结构与语义表达&#xff0c;为 CSS 和 JavaScript 提供承载基础。 1.1 HTML 基本结构与语义化标签 1.1.1 HTML 基本结构 <!DOCTYPE html> <html lang"en"> <hea…...

Android 输入控件事件使用示例

一 前端 <EditTextandroid:id="@+id/editTextText2"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="10"android:inputType="text"android:text="Name" />二 后台代…...

JVM happens-before 原则有哪些?

理解Java Memory Model (JMM) 中的 happens-before 原则对于编写并发程序有很大帮助。 Happens-before 关系是 JMM 用来描述两个操作之间的内存可见性以及执行顺序的抽象概念。如果一个操作 A happens-before 另一个操作 B (记作 A hb B)&#xff0c;那么 JMM 向你保证&#x…...

Python实例题:Python获取NBA数据

目录 Python实例题 题目 方式一&#xff1a;使用网页爬虫获取数据 代码解释 get_nba_schedule 函数&#xff1a; 主程序&#xff1a; 方式二&#xff1a;使用专业 API 获取数据 代码解释 运行思路 方式一 方式二 注意事项 以下是完整的 doubaocanvas 代码块&#…...

【中间件】brpc_基础_remote_task_queue

文章目录 remote task queue1 简介2 核心功能2.1 任务提交与分发2.2 无锁或低锁设计2.3 与 bthread 深度集成2.4 流量控制与背压 3 关键实现机制3.1 数据结构3.2 任务提交接口3.3 任务窃取&#xff08;Work Stealing&#xff09;3.4 同步与唤醒 4 性能优化5 典型应用场景6 代码…...