C#网络编程(Socket编程)
文章目录
- 0、写在前面的话
- 1、Socket 介绍
- 1.1 Socket是什么
- 1.2 Socket在网络中的位置
- 2、C# 中的Socket参数
- 2.1 超时控制参数
- 2.2 缓冲区参数
- 2.3 UDP专用参数
- 3、C# 中的Socket API
- 3.1 Socket(构造函数)
- 3.1.1 SocketType
- 3.1.2 ProtocolType
- 3.1.3 AddressFamily
- 3.2 Bind()
- 3.3 Connect()
- 3.4 Listen()
(TCP)
- 3.5 Accept()
(TCP)
- 3.6 Receive() 与 Send()
- 3.7 ReceiveFrom()与SendTo()
- 3.8 Shutdown()和Close()
- 4、IPAddress 和 IPEndPoint
- 4.1 IPAddress
- 4.2 IPEndPoint
0、写在前面的话
我创建的Unity、C#交流群,有兴趣可加入大家一起学习:952914223
1、Socket 介绍
1.1 Socket是什么
Socket的英文原意是“插座”,的意思,通常在计算机编程中称作套接字,是对对于TCP/IP的封装,我们可以将Socket联想成是由两个Socket对象搭建的成的一根通信管道,管道的两端是这两个Socket对象,而这根管道的连接的是两台主机的应用进程(通过IP地址和端口号确定进程)
1.2 Socket在网络中的位置
2、C# 中的Socket参数
2.1 超时控制参数
- ReceiveTimeout:接收超时
socket.ReceiveTimeout = 5000; // 5秒(单位:毫秒)
// 超时抛出SocketException,ErrorCode为10060 (TimedOut)
- SendTimeout:发送超时
socket.SendTimeout = 3000; // 3秒
// 影响Send/SendTo操作
- BeginConnect:连接超时
// 通过Connect方法的异步版本实现
socket.BeginConnect(remoteEP, null, null);
if(!socket.Connected) {// 自定义超时逻辑
}
2.2 缓冲区参数
- ReceiveBufferSize:接收缓冲区大小
socket.ReceiveBufferSize = 65536; // 64KB
// 影响内核网络栈的接收缓冲区
- SendBufferSize:发送缓冲区大小
socket.SendBufferSize = 32768; // 32KB
// 影响内核网络栈的发送缓冲区
2.3 UDP专用参数
- EnableBroadcast:启用广播
udpSocket.EnableBroadcast = true;
// 允许发送到广播地址(如255.255.255.255)
- 多播设置
// 加入多播组
udpSocket.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.AddMembership,new MulticastOption(IPAddress.Parse("224.0.0.1")));// 设置多播TTL
udpSocket.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.MulticastTimeToLive,2); // 最多跨越2个路由器
3、C# 中的Socket API
3.1 Socket(构造函数)
public Socket(SocketInformation socketInformation);
public Socket(SocketType socketType, ProtocolType protocolType);
public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType);
常见的 Socket 对象创建实例:
// 监控 ip4 地址,套接字类型为 TCP ,协议类型为 TCP
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3.1.1 SocketType
指定 Socket 类的实例表示的套接字类型。
SocketType | 对应的ProtocolType | 描述 |
---|---|---|
Unknown | Unknown | 指定未知的 Socket 类型 |
Stream(使用字节流) | Tcp | 支持可靠、双向、基于连接的字节流 |
Dgram(使用数据报) | Udp | 面向无连接 |
Raw | Icmp、lgmp | 支持对基础传输协议的访问 |
Rdm | 支持无连接、面向消息、以可靠方式发送的消息, | |
Seqpacket | 在网络上提供排序字节流的面向连接且可靠的双向传输 |
3.1.2 ProtocolType
表示协议类型,是一个 enum 类型。
其中枚举重复值,常见用途:
- 为旧值提供别名
- 向后兼容
- 提供更清晰的命名选择
枚举值 | 值 | 协议说明 |
---|---|---|
Unknown | -1 | 未知协议类型 |
Unspecified | 0 | 未指定的协议 |
IP | 0 | Internet 协议 (IP) - 原始 IP 数据包 |
IPv6HopByHopOptions | 0 | IPv6 逐跳选项头 |
Icmp | 1 | Internet 控制消息协议 (ICMP) |
Igmp | 2 | Internet 组管理协议 (IGMP) |
Ggp | 3 | 网关到网关协议 (GGP) |
IPv4 | 4 | IPv4 协议 |
Tcp | 6 | 传输控制协议 (TCP) |
Pup | 12 | PARC 通用数据包协议 (PUP) |
Udp | 17 | 用户数据报协议 (UDP) |
Idp | 22 | Internet 数据报协议 (IDP) |
IPv6 | 41 | IPv6 协议 |
IPv6RoutingHeader | 43 | IPv6 路由头 |
IPv6FragmentHeader | 44 | IPv6 分片头 |
IPSecEncapsulatingSecurityPayload | 50 | IPv6 封装安全负载 (ESP) 头 |
IPSecAuthenticationHeader | 51 | IPv6 认证头 (AH) |
IcmpV6 | 58 | ICMP for IPv6 |
IPv6NoNextHeader | 59 | IPv6 无下一个头 |
IPv6DestinationOptions | 60 | IPv6 目的选项头 |
ND | 77 | Net Disk 协议 (非正式) |
Raw | 255 | 原始 IP 数据包 |
Ipx | 1000 | Internet 数据包交换协议 (IPX) |
Spx | 1256 | 顺序数据包交换协议 (SPX) |
SpxII | 1257 | SPX 版本 2 |
3.1.3 AddressFamily
表示使用的网络寻址方案
枚举值 | 值 | 协议说明 | 使用场景 |
---|---|---|---|
Unknown | -1 | 未知地址族 | 保留值 |
Unspecified | 0 | 未指定的地址族 | 通用情况 |
Unix | 1 | Unix本地通信 | Unix域Socket |
InterNetwork | 2 | IPv4地址族 | 最常用的IPv4网络 |
ImpLink | 3 | ARPANET IMP地址 | 历史遗留 |
Pup | 4 | PUP协议地址 | Xerox PUP网络 |
Chaos | 5 | MIT CHAOS协议 | 历史遗留 |
NS | 6 | Xerox NS协议 | Xerox网络系统 |
Ipx | 6 | IPX/SPX地址 | Novell网络 |
Iso | 7 | ISO协议 | OSI协议族 |
Osi 7 | OSI协议 | 同Iso | |
Ecma | 8 | ECMA协议 | 欧洲计算机制造商协会 |
DataKit | 9 | Datakit协议 | AT&T Datakit |
Ccitt 10 | CCITT协议 | TU-T协议 | |
Sna | 11 | IBM SNA地址 | IBM系统网络架构 |
DecNet | 12 DECnet地址 | Digital Equipment Corporation网络 | |
DataLink | 13 | 直接数据链路接口 | 数据链路层访问 |
Lat | 14 | LAT地址 | Local Area Transport |
HyperChannel | 15 | NSC Hyperchannel | Network Systems Corporation |
AppleTalk | 16 | AppleTalk地址 | Apple网络协议 |
NetBios | 17 | NetBios地址 | Windows网络基本输入输出系统 |
VoiceView | 18 | VoiceView地址 | VoiceView音频协议 |
FireFox | 19 | FireFox协议 | 非标准协议 |
Banyan | 21 | Banyan VINES | Banyan虚拟网络系统 |
Atm | 22 | 本机ATM服务 | 异步传输模式 |
InterNetworkV6 | 23 | IPv6地址族 | IPv6网络 |
Cluster | 24 | Microsoft Wolfpack | Microsoft集群服务 |
Ieee12844 | 25 | IEEE 1284.4工作组 | 打印机共享协议 |
Irda | 26 | IrDA地址 | 红外数据协会 |
NetworkDesigners | 28 | Network Designers OSI网关 | 网络设计者协议 |
Max | 29 | 最大地址族 | 保留值 |
3.2 Bind()
绑定本地IP和端口,你将在在本地创建 IPEndPoint 对象,拥有此 ip:post 的访问权限。目的是绑定本地机器的某个端口,所有经过此端口的数据就归你管了。
public void Bind (System.Net.EndPoint localEP);
使用实例:
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress iP = IPAddress.Parse("127.0.0.1");serverSocket.Bind(new IPEndPoint(iP, 2300))
3.3 Connect()
与远程主机建立连接。Connect() 有四个重载方法,不必关注,只需知道,必需提供 IP 和 Post 两个值。
IPAddress iP = IPAddress.Parse("127.0.0.1");
IPEndPoint iPEndPoint = new IPEndPoint(iP, 2300);
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //创建与远程主机的连接
serverSocket.Connect(iPEndPoint);
3.4 Listen() (TCP)
监控所有发送到此主机的、特定端口的连接请求。服务端使用,客户端不需要。
public void Listen (int backlog);
使用 Bind() 后,使用 Listen() 方法进行监控,backlog 参数指定可排队等待接受的传入连接的数量,即挂起的连接队列的最大长度。
3.5 Accept() (TCP)
Accept() 以同步方式监听套接字,在连接请求队列中提取第一个挂起的连接请求,然后创建并返回一个新的 Socket 对象。
//创建终结点(EndPoint)
IPAddress ip = IPAddress.Any;
IPEndPoint ipe = new IPEndPoint(ip, 8000);//创建 socket 并开始监听
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(ipe);
serverSocket.Listen(10);//开始监听//接受到client连接,为此连接建立新的socket,并接受信息
Socket temp = serverSocket.Accept();//为新建连接创建新的socket
注意的是,每次建立连接是一个 Accept() 对象,如果你要进行 服务器-客户端互相通讯,应使用同一个 Accept() 对象。每个 Accept 对象都是 从客户端请求建立开始的,期间只要使用同一个 Accept 对象,都可以进行数据传输。
3.6 Receive() 与 Send()
- Receive() :接收信息
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = socket.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
- Send() :发送信息
string str = "hello";
byte[] a = Encoding.UTF8.GetBytes(str);
send = socket.Send(a, 0);
3.7 ReceiveFrom()与SendTo()
- ReceiveFrom()
特性 | Receive | ReceiveFrom |
---|---|---|
连接要求 | 需要已建立连接 (面向连接) | 无需预先连接 (无连接) |
适用协议 | TCP UDP | |
来源获取 | 无法获取发送方信息 | 可获取发送方的端点信息 |
方法签名 | int Receive(byte[] buffer) | int ReceiveFrom(byte[] buffer, ref EndPoint remoteEP) |
典型用途 | 可靠数据流传输 | 数据报接收,特别是需要回复的场景 |
- SendTo()
特性 | Send | SendTo |
---|---|---|
连接要求 | 需要已建立连接 (面向连接) | 无需预先连接 (无连接) |
适用协议 | TCP | UDP |
目标指定 | 在Connect时指定目标 | 每次发送时指定目标 |
性能 | 略高 (连接已建立) | 略低 (每次需解析地址) |
可靠性 | 高 (TCP保证送达和顺序) | 低 (UDP不保证送达和顺序) |
方法签名 | Send(byte[] buffer) | SendTo(byte[] buffer, EndPoint remoteEP) |
3.8 Shutdown()和Close()
释放资源,有 Accept 释放和 Socket 的释放。
- Shutdown()
- 向对方发送FIN包,启动TCP的正常关闭握手流程
- 非破坏性操作,Socket对象仍然有效
- 允许完成正在进行的数据传输
- 遵循TCP协议的四次挥手过程
- 对方应用会收到EOF(Receive返回0)
public void Shutdown (System.Net.Sockets.SocketShutdown how);
SocketShutdown:
值 | 描述 |
---|---|
Send | 禁止对此发送Socket |
Receive | 禁用对此接收Socket |
Both | 禁用发送和接收对此Socket |
- Close()
- 破坏性操作,Socket对象不再可用
- 可能丢失发送/接收缓冲区中的数据
- 对方可能收到ConnectionReset错误
- 立即释放系统资源
- 最佳实践
void SafeClose(Socket socket)
{try{// 1. 先优雅关闭通信通道if(socket.Connected){socket.Shutdown(SocketShutdown.Both);}// 2. 设置linger选项确保数据发送socket.LingerState = new LingerOption(true, 5); // 等待5秒// 3. 最终释放资源socket.Close();}catch(Exception ex){// 记录日志Debug.WriteLine($"关闭Socket异常: {ex.Message}");// 确保资源释放socket?.Close(); }
}
4、IPAddress 和 IPEndPoint
4.1 IPAddress
用来处理IP地址、转换IP地址
IPAddress.Parse() 方法可以把以小数点隔分的十进制 IP 表示转化成 IPAddress 类。
IPAddress ip = IPAddress.Parse("127.0.0.1");//把ip地址字符串转换为IPAddress类型的实例
IPAddress提供4个只读字段:
- Any 用于代表本地系统可用的任何IP地址
- Broadcase用于代表本地网络的IP广播地址
- Loopback用于代表系统的回送地址
- None用于代表系统上没有网络接口
4.2 IPEndPoint
表示IPAddress对象与端口的绑定
IPAddress ip = IPAddress.Any; //把ip地址字符串转换为IPAddress类型的实例
IPEndPoint ipe = new IPEndPoint(ip, 8000);//用指定的端口和ip初始化IPEndPoint类的新实例
相关文章:
C#网络编程(Socket编程)
文章目录 0、写在前面的话1、Socket 介绍1.1 Socket是什么1.2 Socket在网络中的位置 2、C# 中的Socket参数2.1 超时控制参数2.2 缓冲区参数2.3 UDP专用参数 3、C# 中的Socket API3.1 Socket(构造函数)3.1.1 SocketType3.1.2 ProtocolType3.1.3 AddressFa…...
使用Python的Schedule库实现定时任务,并传递参数给任务函数
哈喽,大家好,我是木头左! 本文将详细介绍如何使用schedule库来创建定时任务,并展示如何向任务函数传递参数。 安装Schedule库 需要安装schedule库。你可以使用以下命令通过pip进行安装: pip install schedule基本用法 schedule库的基本用法非常简单。你可以通过调用sch…...
Unity Input 2023 Release-Notes
🌈Input 2023 Release-Notes 版本更新内容2023.2.17Input: Crash on InputDeviceIOCTL when closing Unity editor(UUM-10774)2023.2.16Input: Crash on InputDeviceIOCTL when closing Unity editor(UUM-10774)2023.2.15Input: Crash on InputDeviceIOCTL when clo…...
IP查询能够帮助企业进行数字化转型
企业如今正面临着用户行为碎片化、市场竞争白热化的挑战。那么企业要如何从海量网络数据中精准捕捉用户需求就十分重要了。而IP查询技术也正帮助越来越多的企业在精准营销、风险防控、合规运营等领域开辟新的增长空间。 https://www.ipdatacloud.com/?utm-sourceLMN&utm-…...
Nginx漏洞复现
vulhub起靶场 Nginx 文件名逻辑漏洞(CVE-2013-4547) 上传1.gif,内容为 <?php phpinfo();?> http://your-ip:8080/uploadfiles/1.gif[0x20][0x00].php访问文件位置,这里0x00要改包 先访问/uploadfiles/1.gif a.php&…...
数据结构|排序算法(二)插入排序 希尔排序
一、插入排序 1.算法思想 插入排序(Insertion Sort)是一种简单的排序算法,其基本思想是:将待排序的元素插入到已经有序的序列中,从而逐步构建有序序列。 具体过程如下: 把待排序的数组分为已排序和未排…...
OpenBMC:BmcWeb 处理http请求5 检查权限
OpenBMC:BmcWeb 处理http请求4 处理路由对象-CSDN博客 在通过url获取了路由对象后,如果该请求是有session的,那么下一步需要检查权限 1.validatePrivilege调用时传入了一个lambda(1)做为回调 validatePrivilege(req, asyncResp, rule,[req, asyncResp, &rule, params =…...
CentOS 系统磁盘扩容并挂载到根目录(/)的详细步骤
在使用 CentOS 系统时,经常会遇到需要扩展磁盘空间的情况。例如,当虚拟机的磁盘空间不足时,可以通过增加磁盘容量并将其挂载到根目录(/)来解决。以下是一个完整的操作流程,详细介绍了如何将新增的 10G 磁盘…...
Axure RP 9 for Mac 交互原型设计 安装教程@[TOC](文章目录)
Axure RP 9 for Mac 交互原型设计 安装教程TOC 一、介绍 Axure RP 9是一款功能强大的原型设计和协作工具。它不仅能够帮助用户快速创建出高质量的原型设计,还能促进团队成员之间的有效协作,从而极大地提高数字产品开发的效率和质量。拥有直观易用的界面…...
每日一题(小白)暴力娱乐篇19
样例: 6 1 1 4 5 1 4 输出: 56 66 52 44 54 64 分析题意可以得知,就是接收一串数字,将数字按照下标每次向右移动一位(末尾循环到第一位),每次移动玩计算一下下标和数字的乘积且累加。 ①接收…...
LeetCode 第53题:最大子数组和
题目描述: 给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。 示例1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出ÿ…...
顺序表:从数组到高效数据管理的进化之路
一、线性表:数据结构的 “基础骨架” 在数据结构的世界里,线性表是最基础的结构之一。它是由n个具有相同特性的数据元素组成的有限序列,就像一列整齐排列的士兵,每个元素都有唯一的前驱(除了第一个)和后继…...
TS知识补充第一篇 ✅
目录 1️⃣ any、unknow和never 2️⃣ 函数重载 3️⃣ typeof和keyof(配合构建字典类型的Demo,巨好用‼️) 4️⃣ TS的条件类型 5️⃣ TS的声明合并 一、any、unknow和never any any类型表示一个值可以是任何类型。通常在不确定变量的类型…...
每日一题(小白)模拟娱乐篇18
今天和大家一起玩个小游戏,给小朋友分糖果🍬 由题知就是小朋友每次给左手边的小朋友分一半糖果,一轮下来如果是奇数糖果老师就给他补一个直到所有小朋友拥有相同数量的糖果,问问老师发放了多少糖果。用程序进行模拟的大概思路就是…...
Linux系统学习Day2——在Linux系统中开发OpenCV
一、OpenCV简介 OpenCV(Open Source Computer Vision Library)是一个开源的跨平台计算机视觉和机器学习库,广泛应用于图像处理、视频分析、物体检测等领域。它提供了丰富的算法和高效的工具集,支持C、Python等多种语言,…...
Redisson 实现分布式锁
在平常的开发工作中,我们经常会用到锁,那么锁有什么用呢?锁主要是控制对共享资源的访问顺序,防止多个线程并发操作导致数据不一致的问题。经常可能会听到乐观锁、悲观锁、分布式锁、行锁、表锁等等,那么我们今天总结下…...
(适合中白)数据结构进阶篇——搜索专题(广度优先搜索算法BFS和深度优先搜索算法DFS)
深度优先搜索DFS&广度优先搜索BFS 深度优先搜索广度优先搜索 深度优先搜索 当碰到岔路口时,总是以深度作为前进的关键词,不碰到死胡同就不回头的这种搜索方式被称为深度优先搜索(Depth First Search) 深度优先搜索是一种枚举所有完整路径以遍历所有情…...
SGLang实战问题全解析:从分布式部署到性能调优的深度指南
引言:当高性能推理遇上复杂生产环境 在大型语言模型(LLM)的生产部署中,SGLang以其革命性的RadixAttention和结构化编程能力,正成为越来越多企业的首选推理引擎。然而,当我们将32B/70B级别的大模型部署到实际生产环境时࿰…...
Java大视界:解码航天遥测数据的银河密码——从GB到PB的技术革命
当长征火箭划破苍穹的瞬间,每秒产生的遥测数据足以填满一部4K电影。在这场与星辰对话的征程中,Java大数据生态正扮演着解码宇宙密码的"数字炼金师"。本文将带您穿越三个认知维度,揭示Java技术栈如何重构航天数据分析的底层逻辑。 …...
《C++探幽:STL(string类源码的简易实现(下))》
作者的个人gitee▶️ 作者的算法讲解主页 每日一言:“驿寄梅花,鱼传尺素,砌成此恨无重数。🌸🌸” 接《C探幽:STL(string类源码的简易实现(上))》🔴…...
求线性表的倒数第K项 (数组、头插法、尾插法)
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。 输入格式: 输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)…...
rustdesk自建服务器怎么填写客户端配置信息
目录 # id、api、中继都怎么填?rustdesk程序启动后服务不自动启动 # id、api、中继都怎么填? rustdesk程序启动后服务不自动启动 完全退出RudtDesk程序(右下角托盘区有的话,需要右键点退出) 创建windows服务ÿ…...
4月8日日记
今天抖音刷到一个视频 记了一下笔记 想做自媒体,直播,抖音是最大的平台,但是我的号之前因为跟人互喷被封号了 今天想把实名认证转移到新号上,试了一下竟然这次成功了,本以为能开直播了但是 还是因为之前的号有违规记…...
VScode添加python解释器
先安装python扩展 然后点ctrlshiftp搜索python:select,选择解析器(或者也可以直接点左下方的)...
Elasticsearch | ES索引模板、索引和索引别名的创建与管理
关注:CodingTechWork 引言 在使用 Elasticsearch (ES) 和 Kibana 构建数据存储和分析系统时,索引模板、索引和索引别名的管理是关键步骤。本文将详细介绍如何通过 RESTful API 和 Kibana Dev Tools 创建索引模板、索引以及索引别名,并提供具…...
用 Python 造轮子:打造轻量级 HTTP 调试工具
目录 一、为什么需要自建工具? 二、核心功能设计 三、技术选型 四、分步实现 第一步:搭建基础框架 第二步:实现请求转发逻辑 第三步:响应格式化处理 第四步:历史记录存储 五、进阶优化技巧 六、使用示例 七…...
java设计模式-原型模式
原型模式 1、原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并通过拷贝这些原型,创建新的对象 2、原型模式是一种创见性设计模式,允许一个对象再创建另一个可定制的对象,无需知道如何创建的细节。 3、工作…...
【Java设计模式】第9章 原型模式讲解
9. 原型模式 9.1 原型模式讲解 定义:通过拷贝原型实例创建新对象,无需调用构造函数。特点: 创建型模式无需了解创建细节适用场景: 类初始化消耗资源多对象创建过程繁琐(如属性赋值复杂)循环体中需创建大量对象优点: 性能优于直接new简化创建流程缺点: 必须实现clone()…...
Python 快速搭建一个小型的小行星轨道预测模型 Demo
目录 ✅ Demo 目标: 🧪 模型方案选择 方案 1:开普勒 LSTM 混合预测(推荐 💡) 方案 2:全 AI:LSTM 直接拟合轨迹 🚧 环境准备 🔧 示例代码结构ÿ…...
【AI】Ragflow构建本地知识库
https://github.com/infiniflow/ragflow/blob/main/README_zh.md DeepSeek搭建的本地知识库很呆?不符合自己的预期?看完这个视频你就明白了!这样部署吊打其他的本地部署!跟着教程来,不怕学不会!_哔哩哔哩_…...
【Django】教程-12-柱状图
【Django】教程-1-安装创建项目目录结构介绍 【Django】教程-2-前端-目录结构介绍 【Django】教程-3-数据库相关介绍 【Django】教程-4-一个增删改查的Demo 【Django】教程-5-ModelForm增删改查规则校验【正则钩子函数】 【Django】教程-6-搜索框-条件查询前后端 【Django】教程…...
市政消防栓智能监控管理系统(Axure高保真原型)
在城市的运转体系中,市政消防栓扮演着无可替代的关键角色,作为城市公共安全基础设施的核心,它是火灾扑救时的关键水源保障,其重要性不言而喻。当火灾这头 “猛兽” 突然来袭,市政消防栓就是那道阻止火势蔓延、守护生命…...
机器学习课堂6交叉熵代价函数的逻辑回归模型
代码 # 2-10交叉熵代价函数的逻辑回归模型 import pandas as pd import numpy as np import matplotlib.pyplot as plt# 参数设置 iterations 1000 # 迭代次数 learning_rate 0.1 # 学习率 m_train 250 # 训练样本数量# 读入酒驾检测数据集 df pd.read_csv(alcohol_d…...
华为ar1200修改con口密码
<Huawei> <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]user-interface console 0 进入端口 [Huawei-ui-console0]authentication-mode pass 以pass模式登录 [Huawei-ui-console0]set authentication password cipher …...
Java 集合有序性与重复性总结及记忆技巧
Java 集合有序性与重复性总结及记忆技巧 一、集合分类速查表 集合类型是否有序是否允许重复记忆口诀ArrayList✅ 有序(插入顺序)✅ 可重复"数组列表,顺序记牢"LinkedList✅ 有序(插入顺序)✅ 可重复"…...
机器学习--词向量转换
引言 在自然语言处理(NLP)的广阔领域中,计算机面临的一大挑战是理解人类语言的丰富性和复杂性。文本数据对于机器而言,最初只是一连串难以理解的字符。词向量转换便成为了一座关键的桥梁,它将文本中的单词映射为数值向…...
时序数据异常检测-综述
更新中 异常检测基本概念 广义的Out-of-Distribution(广义的OOD)来描述异常检测的相关问题。OOD包括五个相关的子领域,分别为Anomaly Detection(AD)、Novelty Detection(ND)、Open Set Recogntion(OSR)、Out-of-Distribution(OOD)和Outlier Detection(OD)。这5个…...
2025年Python的主要应用场景
李升伟 编译 Python在2025年仍是最受欢迎和强大的编程语言之一。其简洁易读的语法以及庞大的库生态系统,使其成为各行业开发者的首选。无论是构建复杂的数据管道,还是自动化重复性任务,Python都能提供广泛的应用场景,以实现快速、…...
树的深度遍历和广度遍历
目录 一、深度优先遍历(递归)二叉树的深度优先遍历(递归) 二、广度优先遍历二叉树的广度遍历 一、深度优先遍历(递归) #include<iostream> #include<vector>using namespace std;const int N1…...
C++函数如何返回多个参数
在编程中,我们经常会遇到需要函数返回多个值的场景。虽然 C 函数不能直接返回多个参数,但通过一些间接的方法,我们可以轻松实现这一需求。本文将详细介绍几种常见的实现方式,并分析它们的优缺点和适用场景。 1. 引言 在 C 中&…...
Python 实现的运筹优化系统代码详解(0-1规划指派问题)
一、引言 在数学建模的广阔领域中,指派问题作为一类经典且重要的组合优化问题,频繁出现在各类实际场景里。例如,在人力资源管理中,如何将不同技能水平的员工高效地分配到各个项目,以实现项目成本最小化或收益最大化&am…...
深度集成学习不均衡样本图像分类
用五个不同的网络,然后对分类概率进行平均,得到分类结果。基本上分类精度可以提升10% 1.导入基本库 import torch import copy import torch.nn as nn import torchvision.models as models from torchvision import datasets from torchvision import…...
ubuntu 20.04 复现 LVI-SAM
1.环境配置 ubuntu20.04 ROS-Noetic GTSAM 4.0.2 Ceres 1.14.0 前面的我都安装过了,但Ceres 我安装的是 2.2.0,现在安装Ceres 1.14.0 sudo apt-get update sudo apt-get install cmake libgoogle-glog-dev libgflags-dev libatlas-base-dev libeigen3-dev lib…...
每日OJ题_剑指offer数组篇(剑指offer04+剑指offer11+剑指offer21)
目录 剑指 Offer 04二维数组中的查找 代码解析 剑指 Offer 11旋转数组的最小数字 代码解析1 代码解析2 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 代码解析1 代码解析2 剑指 Offer 04二维数组中的查找 LCR 121. 寻找目标值 - 二维数组 - 力扣(LeetCo…...
使用 `tcpdump` 抓取 LiDAR 网络数据包详解
在调试机器人系统或自动驾驶平台时,我们经常需要分析网络中的 LiDAR(激光雷达)数据流。本文将介绍如何使用 tcpdump 工具对指定 IP 的数据包进行抓取和分析,特别是 LiDAR 数据的典型 UDP 报文。 一、什么是 tcpdump? …...
【NLP 55、强化学习与NLP】
万事开头难,苦尽便是甜 —— 25.4.8 一、什么是强化学习 强化学习和有监督学习是机器学习中的两种不同的学习范式 强化学习:目标是让智能体通过与环境的交互,学习到一个最优策略以最大化长期累积奖励。 不告诉具体路线,首先去做…...
【Linux】单例模式及其在线程池中的应用
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
Ansible的使用2
#### 一、Ansible变量 ##### facts变量 > facts组件是Ansible用于采集被控节点机器的设备信息,比如IP地址、操作系统、以太网设备、mac 地址、时间/日期相关数据,硬件信息等 - setup模块 - 用于获取所有facts信息 shell ## 常用参数 filter…...
十三届蓝桥杯省赛A组 扫描游戏
#算法/线段树 #算法/快读 参考题解: 题解参考 这题思路: 先将坐标进行极角排序,按照顺时针的先后顺序,如果出现两个坐标在一个象限中,我们就先判断这两个坐标是否在同一条直线上,如果在同一条直线上,我们按照离原点最近的长度进行排序 之后,我们通过线段树的方法,定义结点tr[i]…...
Python 序列构成的数组(list.sort方法和内置函数sorted)
list.sort方法和内置函数sorted list.sort 方法会就地排序列表,也就是说不会把原列表复制一份。这 也是这个方法的返回值是 None 的原因,提醒你本方法不会新建一个列 表。在这种情况下返回 None 其实是 Python 的一个惯例:如果一个函数 或者…...