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

Linux网络套接字编程——UDP服务器

Linux网络套接字编程——创建并绑定-CSDN博客

前面已经介绍了网络套接字的创建和绑定,这篇文章会通过UDP套接字实现一个UDP服务器。

先介绍将使用的接口。

recvfrom

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);

第一个表示从哪个套接字获取信息,第二个是缓冲区,len是缓冲区长度,数据就会被读到缓冲区中,flags可直接填0。

src_addr是输出型参数,将会返回是哪个客户端发送的信息,addrlen指向src_addr结构的结构体大小,若这两个参数为NULL,则不获取客户端的相关信息。

使用这个函数时,需要自己定义sockaddr_in结构体,并且定义一个变量为sockaddr_in的大小。

然后将其传入,以获得客户端的IP地址和端口。

返回值为实际收到的字节数,出现错误则返回-1。

sendto

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);

sockfd是服务器绑定的套接字的文件描述符,buf是你将要发送的信息,len为buf的长度,flags设为0, dest_addr表示要发消息给谁,addrlen是传入的结构体的长度。

返回值为发送的字节数,出现错误则返回-1。

服务器代码

现在已经可以实现一个UDP服务器了

#include <iostream>
#include <string>
#include <sys/types.h>
#include <cstdlib>
#include <sys/socket.h>
#include <cstring>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <functional>
//服务器将绑定的IP地址
const std::string IP = "0.0.0.0";
//缓冲区的大小
const int MAXBUFSIZE = 1024;
//服务器对发送过来的信息进行何种处理后返回处理后的信息
using func_t = std::function<std::string(const std::string&)>;
class server
{
public://创建并绑定套接字server(uint16_t port, func_t handle, std::string ip = IP);//服务器运行,并且接收信息,向客户端返回处理后的信息void run();
private://服务器如何处理收到的信息,由程序员自己定义func_t _handle;//打开的套接字的文件描述符int _sock_fd;//服务器是否运行bool running;//服务器绑定的端口uint16_t _port;//服务器绑定的IP地址std::string _ip;
};

这里解释一下0.0.0.0IP地址,它意味着服务器绑定本机上的所有网络接口,一般服务器主机会有不止一块网卡,需要将所有网络接口都绑定到服务器上,而不是某一个IP地址。

下面给出服务器初始化的代码

    server(uint16_t port, func_t handle, std::string ip = IP):_port(port),_ip(ip){running = false;_handle = handle;//创建UDP套接字_sock_fd = socket(AF_INET,SOCK_DGRAM,0);if(_sock_fd < 0){std::cout<<"socket error"<<std::endl;exit(1);}//绑定套接字sockaddr_in svr_addr;svr_addr.sin_family = AF_INET;//将端口由主机字节序转为网络字节序svr_addr.sin_port = htons(_port);//将字符串风格的IP地址转为网络字节序的32位svr_addr.sin_addr.s_addr = inet_addr(_ip.c_str());socklen_t len = sizeof(svr_addr);//由于bind的参数是sockaddr*类型,这里需要强转int err = bind(_sock_fd, (sockaddr*)&svr_addr, len);if(err != 0){std::cout<<"bind error"<<std::endl;exit(1);}}

 然后是服务器运行的代码

    void run(){running = true;//保存客户端的IP地址和端口号,以便于将处理后的信息发给他sockaddr_in client_addr;//用于接收数据的缓冲区char buf[MAXBUFSIZE];std::cout << "Server running..." << std::endl;while(running){memset(buf, 0, MAXBUFSIZE);socklen_t len = sizeof(client_addr);ssize_t recv_size = recvfrom(_sock_fd, buf, sizeof(buf) - 1,0,(sockaddr*)&client_addr, &len);client_addr.sin_port = ntohs(client_addr.sin_port);client_addr.sin_addr.s_addr = ntohl(client_addr.sin_addr.s_addr);if(recv_size < 0){std::cout<<"recv error"<<std::endl;continue;}//程序员自定义的处理数据函数std::string ret = _handle(std::string(buf));std::cout << ret << std::endl;memset(buf, 0, MAXBUFSIZE);//向客户端发送处理后的信息ssize_t send_size = sendto(_sock_fd, ret.c_str(), ret.size(), 0, (sockaddr*)&client_addr, len);if(send_size < 0){std::cout<<"send error"<<std::endl;continue;}}}

然后是main函数

//服务器程序像这样使用 ./server [port]
//server是我自己的可执行程序名称,你可以定义自己的
void Usage()
{std::cout<< "Usage: " << "./server" << " port"<<std::endl;
}
//只是简单的将信息回显
std::string handle(const std::string& s)
{return "Server recv:" + s;
}int main(int argc,char* argv[])
{if(argc != 2){Usage();return 1;}uint16_t port = atoi(argv[1]);server svr(port, handle);svr.run();return 0;
}

结合前面的讲解,这些代码应该可以理解,如果还不理解,建议自己动手敲一遍,百分百能理解。

只有服务端还不够完整,不能直观的看到运行效果,下面再给出客户端代码

客户端代码

#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string>
#include <cstring>const int MAXBUFSIZE = 1024;
class client
{
public:client();void SendTo(const sockaddr_in& server_addr, const std::string& msg);private:int _sock_fd;
};

客户端初始化

    client(){_sock_fd = socket(AF_INET,SOCK_DGRAM,0);if(_sock_fd < 0){std::cerr<<"socket error"<<std::endl;exit(1);}}

客户端发送消息

    void SendTo(const sockaddr_in& server_addr, const std::string& msg){int ret = sendto(_sock_fd, msg.c_str(), msg.size(), 0, (sockaddr*)&server_addr, sizeof(server_addr));if(ret < 0){std::cerr<<"sendto error"<<std::endl;exit(2);}}

 main函数

void Usage()
{std::cout<< "Usage: " << "./server" << " port"<<std::endl;
}std::string handle(const std::string& s)
{return "Server recv:" + s;
}
int main(int argc,char* argv[])
{if(argc != 2){Usage();return 1;}uint16_t port = atoi(argv[1]);server svr(port, handle);svr.run();return 0;
}

有了服务器的编写经验,客户端代码应该很容易看懂,你也可以自己写一个运行在电脑上看效果。

你可以使用本地回环地址 127.0.0.1对代码进行测试,用法如下,假设端口是8080

./client 127.0.0.1 8080 

相关文章:

Linux网络套接字编程——UDP服务器

Linux网络套接字编程——创建并绑定-CSDN博客 前面已经介绍了网络套接字的创建和绑定&#xff0c;这篇文章会通过UDP套接字实现一个UDP服务器。 先介绍将使用的接口。 recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr,…...

deepseek+kimi做ppt教程记录

1.首先注册deepseek和kimi deepseek官网&#xff1a;https://chat.deepseek.com/ kimi官网&#xff1a;https://kimi.moonshot.cn/ 以下以一篇工作总结报告为例 2.使用deepseek生成ppt大纲 让deepseek生成kimi生成ppt所需要的内容时&#xff0c;需要注意提示词内容&#xff0c;…...

Cursor 终极使用指南:从零开始走向AI编程

Cursor 终极使用指南&#xff1a;从零开始走向AI编程 问什么是cursor? mindmaproot(Cursor核心功能)智能编码代码生成自动补全错误修复项目管理多窗口布局版本控制终端集成个性设置主题定制快捷键配置插件扩展AI协作对话编程知识检索文档生成前些天发现了一个巨牛的人工智能学…...

TiDB 观测性解读(一)丨索引观测:快速识别无用索引与低效索

导读 可观测性已经成为分布式系统成功运行的关键组成部分。如何借助多样、全面的数据&#xff0c;让架构师更简单、高效地定位问题、分析问题、解决问题&#xff0c;已经成为业内的一个技术焦点。本系列文章将深入解读 TiDB 的关键参数&#xff0c;帮助大家更好地观测系统的状…...

批量将 Excel 文档中的图片提取到文件夹

前面我们介绍过如何批量删除 Excel 文档中的所有图片或者指定的图片&#xff0c;其中就需要用到批量提取 Excel 文档中图片的操作。我们如何才能够将 Excel 文档中的图片快速的提取出来呢&#xff1f;其实单个 Excel 文档中的图片提取到文件夹中是有多种方法可以完成的&#xf…...

postgresql 数据库使用

目录 索引 查看索引 创建 删除索引 修改数据库时区 索引 查看索引 select * from pg_indexes where tablenamet_table_data; 或者 select * from pg_statio_all_indexes where relnamet_table_data; 创建 CREATE INDEX ix_table_data_time ON t_table_data (id, crea…...

怎样进行相关论文的调研——How to conduct research on relevant papers?

怎样进行相关论文的调研 写在前面1.打开Web of Science2.检索同类表达3.构建“检索式”什么是“检索式” 参考内容 写在前面 偶然间刷到一篇知乎文章&#xff0c;顺着文章的推荐看了钟澄老师的科研论和在B站上的教学视频&#xff0c;深入了解后发现读文章还有这么多讲究&#…...

蓝桥杯备赛-基础练习 day1

1、闰年判断 问题描述 给定一个年份&#xff0c;判断这一年是不是闰年。 当以下情况之一满足时&#xff0c;这一年是闰年:1.年份是4的倍数而不是100的倍数 2&#xff0e;年份是400的倍数。 其他的年份都不是闰年。 输入格式 输入包含一个…...

本地算力部署大模型详细流程(一)

1、版本选择 本地部署就是自己部署deepseek模型&#xff0c;使用本地的算力。 主要瓶颈&#xff1a;内存显存的大小。特点&#xff1a;此方案不用联网。适合&#xff1a;有数据隐私方面担忧的或者保密单位根本就不能上网的。 2、部署过程 比较流行的是使用ollama&#xff1a;ht…...

便利店商品推荐数字大屏:基于python和streamlit

基于python和streamlit实现的便利店商品推荐大屏&#xff0c;针对选择困难症消费者。 import streamlit as st import pandas as pd import numpy as np import altair as alt from datetime import datetime, timedelta import time# 模拟数据生成 def generate_data():np.ra…...

机器视觉工程师红外相机的选择:红外长波工业相机和短波红外工业相机玄机大总结

红外长波(LWIR)和短波(SWIR)工业相机在原理、应用场景和技术特点上有显著差异。以下是它们的对比分析: 1. 波长范围与成像原理 2. 技术特点 3. 典型应用场景 4. 优缺点对比 LWIR优势: 无需光照,适用于完全黑暗环境。 直接反映物体温度分布。 对烟雾、灰尘穿透能力强。…...

AI重构SEO关键词布局

内容概要 在搜索引擎优化&#xff08;SEO&#xff09;领域&#xff0c;AI技术的深度应用正在颠覆传统关键词布局逻辑。通过机器学习算法与语义分析模型&#xff0c;智能系统能够实时解析海量搜索数据&#xff0c;构建动态词库并精准捕捉用户意图。相较于依赖人工经验的关键词筛…...

c语言经典基础编程题

c语言经典基础编程题 一、输出输出1.1温度输出1.2排齐数据1.3进制转换 二、选择分支2.1求最大值2.2成绩评定2.3分段函数求值2.4 利润计算2.5判断闰年2.6二次方程根 三、循环结构3.1倒数求和3.2最大数3.3判断素数3.4判断完全数3.5打印菱形&#x1f680;&#x1f680;&#x1f68…...

【每日学点HarmonyOS Next知识】防截屏、作用域问题、观察器问题、对话框关闭、判断对象包含某个字段

1、HarmonyOS 防截屏功能如何实现&#xff1f; 防截屏功能如何实现 参考demo&#xff1a; aboutToDisappear(): void {let windowClass: window.Window | undefined undefined;window.getLastWindow(getContext(this)).then((win) > {this.window win }) window.getLas…...

linux操作系统实战

第一题 创建根目录结构中的所有的普通文件 [rootlocalhost ~]# cd /[rootlocalhost /]# mkdir /text[rootlocalhost /]# cd /text[rootlocalhost text]# mkdir /text/boot /text/root /text/home /text/bin /text/sbin /text/lib /text/lib64 /text/usr /text/opt /text/etc /…...

MKS HA-MFV:半导体制造中的高精度流量验证技术解析

引言 在半导体先进制程&#xff08;如3nm节点&#xff09;中&#xff0c;工艺气体流量的精准控制直接决定刻蚀、沉积等关键步骤的均匀性和良率。MKS Instruments推出的 HA-MFV&#xff08;High Accuracy Mass Flow Verifier&#xff09; 通过创新设计解决了传统流量验证技术的…...

图论part2|200. 岛屿数量、695. 岛屿的最大面积

200、岛屿数量 &#x1f517;&#xff1a;200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09;思路&#xff1a; 1. 深度优先算法 二叉树中dfs要素&#xff1a;1、访问左右相邻子节点 2、判断base case&#xff08;终止条件&#xff09;参考二叉树中的dfs看网格问题1. 网格…...

小白学Agent技术[5](Agent框架)

文章目录 Agent框架Single Agent框架BabyAGIAutoGPTHuggingGPTHuggingGPT工作原理说明GPT-EngineerAppAgentOS-Copilot Multi-Agent框架斯坦福虚拟小镇TaskWeaverMetaGPT微软UFOAgentScope现状 常见Agent项目比较概述技术规格和能力实际应用案例开发体验比较ChatChain模式 Agen…...

SpringBoot为什么流行以及能解决什么问题?

Spring Boot 之所以流行&#xff0c;主要是因为它极大地简化了 Spring 应用的开发&#xff0c;提供了一种开箱即用的体验&#xff0c;使开发者能够快速构建独立运行的、生产级的 Spring 应用。 Spring Boot 为什么流行&#xff1f; 简化配置 传统 Spring 需要大量 XML 或 Java…...

MySQL -- 数据类型

1、数据库的基础数据类型 TINYINT INT BIGINT FLOAT DECIMAL CHAR VARCHAR TEXT BLOB DATE DATETIME TIMESTAMP SET ENUM 2、不同数据类型区别以及作用 1、数值类型 1.1 整数类型 1.1.1 TINYINT 这里我们以TINYINT这个类型为例&#xff0c;解释一下在mysql中…...

TypeScript 中 interface 与 type的使用注意事项 及区别详细介绍

interfact 与 type 的区别及使用方法 一、 interfact 与 type主要区别 二、 interfact 与 type具体用法 1. 定义对象类型 interface 的典型用法&#xff1a; interface Person {name: string;age: number;greet(): void; }type 的等效定义&#xff1a; type Person {name…...

使用位运算如何找到数组中只出现一次的数?

题目链接&#xff1a;137. 只出现一次的数字 II - 力扣&#xff08;LeetCode&#xff09; 算法解析 位运算是用于二进制的运算符号。而对于多次出现的数字&#xff0c;其二进制都是一模一样的&#xff0c;这里是3次重复的出现是数字。由此我们可以想到&#xff0c;如果我们由低…...

复变函数摘记1

复变函数摘记1 1. 基本概念1.1 复数、复变函数1.2 复变函数的极限、连续性1.3 复变函数的导数、微分1.4 解析函数、柯西-黎曼方程 2. 复变函数的积分2.1 复变函数的曲线积分2.2 柯西-古萨基本定理、复合闭路定理2.3 复变函数的不定积分2.4 柯西积分公式、高阶导数 \quad 本文摘…...

(2025|ICLR|厦大华为,LoSA,基于表示互信息的动态层级稀疏率,基于重构误差的秩分配)LLM 的动态低秩稀疏自适应

Dynamic Low-Rank Sparse Adaptation for Large Language Models 目录 1. 引言 1.1 关键词 2. 方法 2.1 预备知识 2.2 层级稀疏率确定 2.3 稀疏感知的秩分配 2.4 动态稀疏与适配 3. 实验 3.1 实验设置 3.2 语言建模 3.3 零样本任务 3.4 N:M 稀疏性 3.5 消融实验 …...

暨南大学智科人工智能复试模拟

本人初试统招线以外&#xff0c;复试逆袭上岸&#xff01;&#xff01;&#xff01;复试中的笔试和面试尤为重要&#xff0c;笔试固然重要但是面试的不确定性更强。另外&#xff0c;很多同学在复试之前可能都没有完整的走过一遍复试面试的流程&#xff0c;这里建议大家最好是能…...

编译器视角下的 C++ 异常:探究 throw 与 catch 的编译原理

目录 0.写在前面 1.C异常概念 异常的定义&#xff1a; 异常处理的基本组成部分&#xff1a; 1. throw表达式 2. try块 3. catch块 2. 异常的使用 异常的抛出和匹配原则&#xff1a; 在函数调用链中异常栈展开匹配原则&#xff1a; 3.异常的重新抛出 4.异常安全 异…...

测试淘宝评论接口返回数据的详细说明

在电商数据分析、用户体验优化和竞品分析中&#xff0c;获取商品评论数据是一项重要的功能。淘宝开放平台提供了商品评论的 API 接口&#xff0c;允许开发者通过合法的方式获取商品的用户评论数据。本文将详细介绍如何测试淘宝评论接口的返回数据&#xff0c;包括接口调用步骤、…...

【微知】plantuml在泳道图中如何将几个步骤放入一个框中?(group “sub框1“; end !! “sub框1“)

背景 将几个步骤放在一起画个框&#xff0c;分区方便 命令 用法&#xff1a; group 和 end 关键字 用法&#xff1a; group "sub框1"User -> User: 模板渲染User -> User: 返回 HTMLend !! "sub框1" 这里!!是注释实操 修改前&#xff1a; 修改…...

深入解析 React 最新特性:革新、应用与最佳实践

深入解析 React 最新特性&#xff1a;革新、应用与最佳实践 1. 引言 React 作为前端开发的核心技术之一&#xff0c;近年来不断推出 新的 API 和优化机制&#xff0c;从 Concurrent Rendering&#xff08;并发模式&#xff09; 到 Server Components&#xff08;服务器组件&a…...

C语言之数据结构:理解什么是数据结构和算法(启航)

引言 启航篇&#xff0c;理解什么是数据结构和算法 在 C 语言编程领域&#xff0c;数据结构和算法是两个核心且紧密相关的概念 一、数据结构 定义 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合&#xff08;比如数组&#xff09;&#xff0c;它是组织和存储数…...

【21】单片机编程核心技巧:if语句逻辑与真假判断

【21】单片机编程核心技巧&#xff1a;if语句逻辑与真假判断 七律 条件分野 if语句判真假&#xff0c;括号条件定乾坤。 非零为真零为假&#xff0c;大括号内藏玄门。 省略虽简风险在&#xff0c;代码规范护本根。 单片逻辑由心控&#xff0c;条件分支自成文。 注释&#xf…...

hackme靶机通关攻略

第一步&#xff1a;确定靶机IP 第二步&#xff1a;使用御剑后台扫描工具扫描敏感文件 第三步&#xff1a;访问register.php注册登录&#xff0c;进入welcome.php页面 第四步&#xff1a;访问一个不存在的页面&#xff0c;确定网站使用的中间件是Apache&#xff08;无用&#xf…...

网络安全演练有哪些形式

OPENVAS使用 1、确定指定IP是否能ping通 2、创建扫描目标 3、创建扫描任务&#xff08;scan management →newtask&#xff09; 4、开始任务start 5、查看扫描细节 6、查看扫描结果&#xff0c;包含漏洞详细信息&#xff0c;亦可到处PDF文件 7、导出扫描结果报告 8、为…...

PE,ELF,COFF

本文来自 (1)腾讯元宝 (2)程序员的自我修养 PE&#xff08;Portable Executable&#xff09;是一种文件格式&#xff0c;主要用于Windows操作系统中的可执行文件&#xff08;如.exe、.dll、.sys等&#xff09;。PE格式是Windows操作系统中标准的可执行文件格式&#xff0c;由…...

sql靶场-时间盲注(第九、十关)保姆级教程

目录 时间盲注&#xff08;第九、十关&#xff09; 1.判断 2.确认时间盲注 2.手工尝试时间盲注 数据库名长度 数据库名字符 表数 表名长度 表名字符 字段数 字段名长度 字段名字符 4.脚本时间盲注注入 5.第十关 时间盲注&#xff08;第九、十关&#xff09; 1.判…...

常见FUZZ姿势与工具实战:从未知目录到备份文件漏洞挖掘

本文仅供学习交流使用&#xff0c;严禁用于非法用途。未经授权&#xff0c;禁止对任何网站或系统进行未授权的测试或攻击。因使用本文所述技术造成的任何后果&#xff0c;由使用者自行承担。请严格遵守《网络安全法》及相关法律法规&#xff01; 目录 本文仅供学习交流使用&am…...

【linux】解决 Linux 系统中 root 用户无法打开图形界面问题

【linux】解决 Linux 系统中 root 用户无法打开图形界面问题 问题描述&#xff1a; 在 Linux 系统中&#xff0c;当我们远程SSH尝试以 root 用户身份运行需要图形界面的应用程序时&#xff0c;可能会遇到以下错误信息&#xff1a; MoTTY X11 proxy: Unsupported authorisati…...

数据库系统概念全面解析

数据库系统可能看起来很抽象&#xff0c;但其实它们就像我们生活中的许多事物一样&#xff0c;有着清晰的结构和规则。让我们通过一些有趣的生活例子来理解这些概念。 一、数据库系统基础 想象一个图书馆&#xff1a; - 数据库管理系统(DBMS) 就像图书馆的管理员 - 数据库(DB…...

unity Rigidbody2D、Collider2D参数详解

Rigidbody2D属性&#xff1a; BodyType&#xff1a;类别Simulated&#xff1a;模拟&#xff0c;是否模拟真实物理效果。Use Auto Mass&#xff1a;使用自动质量&#xff0c;根据BoxCollider2D大小来设定Mass&#xff1a;质量。Linear Drag&#xff1a;影响位置移动的阻力系数An…...

es-索引详解

在 Elasticsearch 中&#xff0c;**索引&#xff08;Index&#xff09;**是核心概念之一&#xff0c;类似于关系型数据库中的“表”。索引用于存储、组织和检索文档&#xff08;Document&#xff09;。以下是关于 Elasticsearch 索引的详细解析&#xff1a; 1. 索引的基本概念 …...

SpringBoot3+Lombok如何配置logback输出日志到文件

Background/Requirement SpringBoot3Lombok如何配置logback输出日志到文件&#xff0c;因为我需要对这些日志进行输出&#xff0c;控制台输出和文件输出&#xff0c;文件输出是为了更好的作为AuditLog且支持滚动式备份&#xff0c;每天一个文件。 Technical Solution 1.确保你…...

城市客运安全员适合哪几类人报考

城市客运安全员适合以下几类人报考&#xff1a; 相关专业人员&#xff1a;交通工程、安全工程、交通运输管理等相关专业的人员&#xff0c;他们在学校系统学习过交通安全、运输管理、安全管理等方面的知识&#xff0c;具备扎实的理论基础&#xff0c;更容易理解和掌握城市客运…...

Elasticsearch 解析 updateTime 字段时格式错误

遇到的问题: {"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse field [updateTime] of type [date] in document with id 57"}],"type":"mapper_parsing…...

Windows远程桌面黑屏怎么办?

在使用Windows远程桌面连接另一台电脑时&#xff0c;用户经常会遇到Windows远程桌面黑屏的问题。那么&#xff0c;该如何有效地解决Windows远程桌面黑屏的问题呢&#xff1f;遇到远程桌面连接黑屏的问题时&#xff0c;可以通过在本地组策略编辑器中禁用WDDM图形显示驱动来解决。…...

计算机视觉|超详细!Meta视觉大模型Segment Anything(SAM)源码解剖

一、引言 在计算机视觉领域&#xff0c;图像分割是一个核心且具有挑战性的任务&#xff0c;旨在将图像中的不同物体或区域进行划分和识别&#xff0c;广泛应用于自动驾驶、医学影像分析、安防监控等领域。Segment Anything Model&#xff08;SAM&#xff09;由 Meta AI 实验室…...

【不动产登记全解析】范围、内容与不予登记的情形

在现代经济社会中&#xff0c;不动产作为重要的资产形式&#xff0c;其权利的确立与流转离不开规范的登记制度。今天&#xff0c;我们就来深入探讨不动产登记的三大核心议题&#xff1a;登记的广泛范围、登记簿上的必备记载事项&#xff0c;以及在哪些情况下不动产登记将不会被…...

机器学习之距离度量方法

常见的距离度量方法及相关函数、图示如下: 1. 欧几里得距离(Euclidean Distance) 函数公式:对于两个 ( n ) 维向量 ( x = ( x 1 , x 2 , ⋯   ,...

2340单点修改、区间查询

2340单点修改、区间查询 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;线段树 &#x1f4d6; &#x1f4da; import java.util.Scanner;public class Main {static int N 100010;static int n;static int[] c new int[N];static int lowbit(int x){ // 求loub…...

Go语言 vs Java语言:核心差异与适用场景解析

在当今的软件开发领域&#xff0c;Go&#xff08;Golang&#xff09;和Java都是备受关注的后端开发语言。尽管二者都能构建高性能服务&#xff0c;但它们在设计哲学、语法特性和应用场景上存在显著差异。本文将从多个维度对比这两种语言&#xff0c;帮助开发者更好地理解它们的…...

18 | 实现简洁架构的 Handler 层

提示&#xff1a; 所有体系课见专栏&#xff1a;Go 项目开发极速入门实战课&#xff1b;欢迎加入 云原生 AI 实战 星球&#xff0c;12 高质量体系课、20 高质量实战项目助你在 AI 时代建立技术竞争力&#xff08;聚焦于 Go、云原生、AI Infra&#xff09;&#xff1b;本节课最终…...