UDP 多点通信
一、setsockopt/getsockopt 函数详解
1. 函数原型
c
#include <sys/socket.h>
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
2. 功能
- setsockopt:设置套接字选项(修改网络属性)。
- getsockopt:获取套接字选项(查询网络属性)。
3. 参数说明
参数 | 描述 |
---|---|
sockfd | 套接字文件描述符 |
level | 协议层级:SOL_SOCKET (通用选项)IPPROTO_IP (IP 层选项)IPPROTO_UDP (UDP 层选项) |
optname | 选项名称(依赖于level ) |
optval | 选项值(指针类型,具体类型取决于optname ) |
optlen | optval 的字节长度(getsockopt 需传入指针,setsockopt 需传入值) |
4. 常用选项及示例
4.1 SOL_SOCKET 层级
SO_REUSEADDR
:允许重用本地地址和端口(解决端口占用问题)。c
int optval = 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
SO_BROADCAST
:允许发送广播数据(仅 UDP 可用)。c
int optval = 1; setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval)); // 发送方需设置
SO_RCVTIMEO/SO_SNDTIMEO
:设置接收 / 发送超时时间(struct timeval
类型)。c
struct timeval timeout = {3, 0}; // 3秒超时 setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
4.2 IPPROTO_IP 层级(组播相关)
IP_ADD_MEMBERSHIP
:加入组播组。c
struct ip_mreqn mreq; mreq.imr_multiaddr.s_addr = inet_addr("224.1.2.3"); // 组播IP mreq.imr_address.s_addr = inet_addr("192.168.1.100"); // 本地IP mreq.imr_ifindex = 0; // 网络接口索引(0表示自动选择) setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
IP_DROP_MEMBERSHIP
:退出组播组(参数同IP_ADD_MEMBERSHIP
)。
4.3 IPPROTO_TCP 层级
TCP_NODELAY
:禁用 Nagle 算法(提升实时性)。c
int optval = 1; setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &optval, sizeof(optval));
二、UDP 多点通信
1. 广播通信(Broadcast)
-
特点:
- 一对多通信,数据发送到局域网内所有主机。
- 广播地址示例:
192.168.1.255
(网络号 + 全 1 主机号)或255.255.255.255
(受限广播)。 - 仅 UDP 支持,数据不可跨路由器。
-
实现步骤:
广播接收者(UDP 服务器):
- 创建 UDP 套接字:
socket(AF_INET, SOCK_DGRAM, 0)
。 - 绑定广播地址(如
192.168.1.255
或0.0.0.0
)。c
struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(8888); addr.sin_addr.s_addr = inet_addr("192.168.1.255"); bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
- 接收数据:
recvfrom()
。
广播发送者(UDP 客户端):
- 创建 UDP 套接字。
- 设置
SO_BROADCAST
选项。 - 发送数据到广播地址:
sendto()
。c
int optval = 1; setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval)); struct sockaddr_in dest_addr; dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(8888); dest_addr.sin_addr.s_addr = inet_addr("192.168.1.255"); sendto(sockfd, "Hello", 5, 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));
- 创建 UDP 套接字:
2. 组播通信(Multicast)
-
特点:
- 一对一组通信,仅加入组播组的主机可接收数据。
- 组播 IP 范围:
224.0.0.0
~239.255.255.255
。 - 需通过
IP_ADD_MEMBERSHIP
加入组播组。
-
实现步骤:
组播接收者(UDP 服务器):
- 创建 UDP 套接字。
- 加入组播组:
setsockopt()
设置IP_ADD_MEMBERSHIP
。 - 绑定组播 IP 和端口(或绑定
0.0.0.0
接收所有组播数据)。c
struct ip_mreqn mreq; mreq.imr_multiaddr.s_addr = inet_addr("224.1.2.3"); mreq.imr_address.s_addr = INADDR_ANY; // 本地IP设为任意 setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(8888); addr.sin_addr.s_addr = INADDR_ANY; // 绑定任意IP bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
组播发送者(UDP 客户端):
- 创建 UDP 套接字。
- 直接发送数据到组播 IP:
sendto()
。c
struct sockaddr_in dest_addr; dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(8888); dest_addr.sin_addr.s_addr = inet_addr("224.1.2.3"); sendto(sockfd, "Hello", 5, 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));
三、关键对比
特性 | 广播(Broadcast) | 组播(Multicast) |
---|---|---|
地址范围 | 局域网内所有主机(如192.168.1.255 ) | 组播组(如224.1.2.3 ) |
网络层支持 | 依赖链路层广播 | 依赖 IP 组播协议 |
跨路由 | 不可跨路由 | 可通过配置跨路由(需路由器支持) |
资源消耗 | 高(所有主机接收) | 低(仅组成员接收) |
适用场景 | 局域网内通知(如 DHCP) | 实时流媒体、在线会议(如视频直播) |
四、代码示例:UDP 广播聊天
1. 广播接收者(服务器)
c
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>#define PORT 8888
#define BUF_SIZE 128int main() {// 创建UDP套接字int sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (sockfd < 0) { perror("socket error"); return -1; }// 允许端口重用int optval = 1;setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));// 绑定广播地址struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(PORT);addr.sin_addr.s_addr = inet_addr("192.168.1.255"); // 或 INADDR_BROADCASTif (bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {perror("bind error"); return -1;}// 接收广播数据char buf[BUF_SIZE] = {0};struct sockaddr_in cli_addr;socklen_t cli_len = sizeof(cli_addr);while (1) {ssize_t n = recvfrom(sockfd, buf, BUF_SIZE-1, 0, (struct sockaddr*)&cli_addr, &cli_len);if (n > 0) {buf[n] = '\0';printf("Received: %s\n", buf);}}close(sockfd);return 0;
}
2. 广播发送者(客户端)
c
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>#define PORT 8888
#define BUF_SIZE 128int main() {// 创建UDP套接字int sockfd = socket(AF_INET, SOCK_DGRAM, 0);if (sockfd < 0) { perror("socket error"); return -1; }// 允许发送广播int optval = 1;setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval));// 广播地址struct sockaddr_in dest_addr;memset(&dest_addr, 0, sizeof(dest_addr));dest_addr.sin_family = AF_INET;dest_addr.sin_port = htons(PORT);dest_addr.sin_addr.s_addr = inet_addr("192.168.1.255");// 发送数据char buf[BUF_SIZE] = {0};while (fgets(buf, BUF_SIZE, stdin)) {buf[strcspn(buf, "\n")] = 0; // 去除换行符sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));memset(buf, 0, BUF_SIZE);}close(sockfd);return 0;
}
五、总结
setsockopt/getsockopt
:是网络编程中配置套接字行为的核心函数,通过不同层级和选项可实现端口重用、超时控制、组播加入等高级功能。- UDP 广播:适用于局域网内的一对多通信,但存在广播风暴风险,且无法跨路由。
- UDP 组播:通过组播组实现高效的一对多通信,节省网络资源,适合实时数据传输。
- 注意事项:
- 广播发送方需设置
SO_BROADCAST
选项,接收方需绑定广播地址。 - 组播接收方需通过
IP_ADD_MEMBERSHIP
加入组播组,发送方直接向组播 IP 发送数据。
- 广播发送方需设置
相关文章:
UDP 多点通信
一、setsockopt/getsockopt 函数详解 1. 函数原型 c #include <sys/socket.h> int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);…...
什么是TCP协议?它存在哪些安全挑战?
一、TCP协议概述 TCP(传输控制协议)是互联网中面向连接、可靠的传输层协议,主要负责在不可靠的IP层上实现数据的可靠传输。其核心特点包括: 面向连接:通信前需通过三次握手(SYN-SYN/ACK-ACK)建…...
《Python星球日记》 第80天:目标检测(YOLO、Mask R-CNN)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、目标检测简介1. 边界框(Bounding Box)与类别标签2. 两阶段 vs 单阶段检测器两阶段检测器特点:单阶段检测器特点:二、YOLO(You Only Lo…...
工业大数据的定义
目录 工业大数据的定义 工业大数据发展历程 工业大数据的特征 工业大数据的处理流程 工业大数据在处理上面临的挑战 工业大数据的有效处理方案 工业大数据处理相关案例 数益工联 x TDengine 中天钢铁 x TDengine 广州某企业工业互联网项目 x TDengine 格创东智 x TD…...
Cursor vs VS Code vs Zed
代码编辑器的世界已经迎来了创新的爆发。曾经由重量级IDE或基础文本编辑器主导的领域,如今开发者们发现自己正在探索全新一波聚焦于AI集成、协作和性能的工具。 在本文中,我们将深入探讨2025年三款流行的编辑器:Cursor、Visual Studio Code (VS Code)和Zed Code Editor。每…...
道通龙鱼系列-混合翼无人机:垂直起降+长时续航
道通龙鱼系列-混合翼无人机:垂直起降长时续航 道通龙鱼系列无人机采用独特的倾转翼尖设计,有效融合多旋翼垂直起降和固定翼长时续航的双重优势,机动、灵活,适应各种复杂起降条件;整机采用快拆和高效气动设计࿰…...
单片机-STM32部分:17、数码管
飞书文档https://x509p6c8to.feishu.cn/wiki/TOQqweKHWinugokUyqzcwb0fnTd 原理: 一个二极管等于八个LED组合在一起,想要显示什么形状,就点亮对应LED即可。 数码管根据其公共端所接的阳极和阴极的不同,分为了共阴极数码管和共阳…...
Web安全科普:构建数字世界的“防盗门”
目录 一、Web安全的核心挑战 二、六大核心威胁深度解析 三、安全防御体系构建 四、开发者必备工具包 五、法律合规要点 六、未来安全趋势 一、Web安全的核心挑战 1. 攻击者视角的入口 数据流动路径:用户 → 浏览器 → 网络 → 服务器 → 数据库 脆弱点分布&a…...
深入解析HTTP协议演进:从1.0到3.0的全面对比
HTTP协议作为互联网的基础协议,经历了多个版本的迭代演进。本文将详细解析HTTP 1.0、HTTP 1.1、HTTP/2和HTTP/3的核心特性与区别,帮助开发者深入理解网络协议的发展脉络。 一、HTTP 1.0:互联网的奠基者 核心特点: 短连接模式&am…...
【RAP】RAP动作与流行舞蹈/街舞
RAP动作与流行舞蹈风格的匹配性分析 Rap动作与各种流行舞蹈风格的匹配度如下: 最匹配 街舞(Hip-hop/Street Dance) 完美匹配程度:★★★★★原因:Rap和街舞同源于嘻哈文化,共享相同的文化根基特点:街舞的断点式动作、力量感和即兴性与Rap的节奏完美契合代表动作:Break…...
BUUCTF——web刷题第一页题解
共31题,admin那题没有,因为环境问题,我做的非常卡 目录 极客大挑战 2019]Havefun [HCTF 2018]WarmU [ACTF2020 新生赛]Include [ACTF2020 新生赛]Exec [GXYCTF2019]Ping Ping Ping [SUCTF 2019]EasySQL [极客大挑战 2019]LoveSQL [极…...
windows、Ubuntu、Debian 添加静态路由
1. windows 10 添加静态路由 快捷键win R: 输入 cmd ,打开命令行窗口 route print // 查看已经存在的路由 route add 192.168.3.0 mask 255.255.255.0 192.168.3.200 // 添加静态路由 192.168.3.200 为下一跳 route add -p 192.168.…...
服务器连接多客户端
一、epoll 核心函数详解 1. epoll_create/epoll_create1 - 创建 epoll 实例 c #include <sys/epoll.h> int epoll_create(int size); // Linux 2.6.8前需指定size(>1),后续版本可忽略 int epoll_create1(int flags); // 推荐使用…...
驿客时光影院酒店升级:雷克赛恩 Cyber Pro 1 如何重塑住宿观影体验
一、影院式酒店新趋势:当住宿邂逅沉浸式观影体验 (一)驿客时光的差异化突围 成都温江区的驿客时光影院酒店,凭借 “百寸巨幕观影 舒适住宿” 的差异化定位,成为年轻旅客打卡热点。其 20 间主题客房均配备独立投影设…...
Cinema4D 26.014
添加图片注释,不超过 140 字(可选) 软件概述 Cinema 4D是德国MAXON公司开发的一款专业的3D动画、建模、仿真和渲染软件解决方案,在3D设计领域应用广泛。 功能特点 强大的建模功能 多边形建模:提供了丰富的多边形建模…...
脚本语言Lua
本文来源 :腾讯元宝 Lua是一种轻量级、可嵌入的脚本语言,由巴西里约热内卢天主教大学的Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo于1993年开发。其设计目标是嵌入应用程序中,提供灵活的扩展和定制功能。 主要特性…...
106. 从中序与后序遍历序列构造二叉树
https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/description/?envTypestudy-plan-v2&envIdtop-interview-150思路:我们知道后序的顺序是左右根,所以后序数组的最后一个一定是根节点,然后中序…...
全链路压测实战指南:从理论到高可用架构的终极验证
全链路压测实战指南:从理论到高可用架构的终极验证 引言:你的系统,真的准备好迎接洪峰了吗? 凌晨3点,某大型电商平台秒杀活动突袭上线。百万用户同时涌入,订单接口响应时间从200ms飙升到15秒,数据库连接池被瞬间耗尽,支付服务直接“熔断”,连锁反应导致库存混乱、物流…...
分布式AI推理的成功之道
随着AI模型逐渐成为企业运营的核心支柱,实时推理已成为推动这一转型的关键引擎。市场对即时、可决策的AI洞察需求激增,而AI代理——正迅速成为推理技术的前沿——即将迎来爆发式普及。德勤预测,到2027年,超半数采用生成式AI的企业…...
纯前端实现基于位置的天气和动态背景图片
如何为博客首页实现基于位置的天气和动态背景图片 引言 我为我的博客主页添加了根据用户所在位置显示当地天气、日出日落时间,并加载一张与天气和时间段匹配的高质量背景图片,可以显著提升用户体验。想象晴天时展示阳光普照的田野,雨天时呈现…...
1.1 认识编程与C++
认识编程与C教程 目标 理解程序、指令、数据的概念。了解C在现实中的应用场景。学会搭建编程环境,迈出第一步。 一、编程是什么?——给计算机写“魔法指令” 1. 基本概念 程序:一系列指令的集合,像一本“魔法食谱”。 &#x…...
代码随想录算法训练营第60期第三十七天打卡
大家好,今天我们算法训练营的第37天,首先为自己感到骄傲,居然坚持下来了,本来觉得自己可能坚持不下来,但是我硬是坚持下来了,好样的,同时也感谢那些看我的题解给我点赞的朋友,我在这…...
每周靶点:TIGIT、ICAM1及文献分享
本期精选了《抑制性受体TIGIT》《细胞粘附分子ICAM1》《真核蛋白表达:选择合适的条件进行》《文献分享:双特异性和多特异性抗体的可开发性评估》四篇文章。以下为各研究内容的概述: 抑制性受体TIGIT TIGIT是一种具有Ig和ITIM结构域的T细胞免…...
介绍一下什么是 AI、 AGI、 ASI
1. AI(人工智能):工具化的“窄域智能” 定义: AI 是能够执行特定任务的智能系统,依赖大量数据和预设规则,缺乏自主意识和跨领域通用性。 特点: 任务专用:如图像识…...
部署安装jenkins.war(2.508)
实验目的:部署jenkins,并与gitlab关联bulid 所需软件:jdk-17_linux-x64_bin.tar.gz jenkins.war apache-tomcat-10.1.40.tar.gz 实验主机:8.10具有java环境,内存最少为4G,cpu双核 目录 jdk安装 …...
【歌曲结构】2:小节与歌曲结构信息整合
歌曲小节与结构信息整合 我将为您整合小节信息与歌曲结构,创建一个更加详细的JSON数据结构。 处理方法 将小节时间与歌曲结构段落进行匹配为每个小节添加所属段落信息为小节添加格式化的时间戳为小节添加对应时间范围内的歌词{"song_title": "财神庙前许三亿…...
商城系统前端
商城系统的前端技术涉及多个层面的技术选型与架构设计,结合搜索结果中的信息,以下是商城系统前端技术的核心要点及实现方案: 一、基础技术栈 HTML5 & CSS3 功能定位:作为前端开发的基础,…...
OpenSSH 漏洞-SSH 服务器面临 MitM 攻击和拒绝服务攻击的风险
OpenSSH 发布了安全更新,修复了两个漏洞,一个是 MitM 攻击漏洞,另一个是拒绝服务漏洞,其中一个漏洞是在十多年前引入的。Qualys 发现了这两个漏洞,并向 OpenSSH 的维护人员展示了其可利用性。 OpenSSH(开放…...
PostgreSQL MCP 使用案例
## 概述 PostgreSQL MCP(PostgreSQL Multi-host Cluster Provisioning)是一种用于部署和管理多节点PostgreSQL集群的工具和架构。它提供了高效的数据库集群管理、高可用性保障和负载均衡功能。本文档将介绍PostgreSQL MCP的基本使用方法和常见应用场景。…...
什么是接口文档,如何使用,注意事项有哪些
一、接口文档的核心内容 基础信息 接口名称:明确功能(如“用户登录接口”)。 接口地址:URL 或 RPC 路径(如 /api/v1/login)。 请求方法:HTTP 方法(GET/POST/PUT/DELETE)…...
Swagger go中文版本手册
Swaggo(github.com/swaggo/swag)的注解语法是基于 OpenAPI 2.0 (以前称为 Swagger 2.0) 规范的,并添加了一些自己的约定。 主要官方文档: swaggo/swag GitHub 仓库: 这是最权威的来源。 链接: https://github.com/swaggo/swag重点关注: README.md: 包含了基本的安装、使用…...
[Java实战]Spring Boot + Netty 实现 TCP 长连接客户端及 RESTful 请求转发(二十六)
[Java实战]Spring Boot Netty 实现 TCP 长连接客户端及 RESTful 请求转发(二十六) 在现代微服务架构中,经常需要在不同服务之间进行高效、可靠的通信。本文将介绍如何使用 Spring Boot 结合 Netty 实现一个 TCP 长连接客户端,并…...
ProfibusDP主站转ModbusRTU/TCP与横河AXG电磁流量计通讯案例
ProfibusDP主站转ModbusRTU/TCP与横河AXG电磁流量计通讯案例 在当今数字化工业时代,智能仪表与控制系统的互联互通成为提高生产效率和管理水平的关键。横河AXG电磁流量计作为一款高性能的流量测量设备,在多个行业得到了广泛应用。而Profibus DP作为一种…...
鸿蒙OSUniApp开发的商品详情展示页面(鸿蒙系统适配版)#三方框架 #Uniapp
使用UniApp开发的商品详情展示页面(鸿蒙系统适配版) 前言 随着移动电商的普及,一个体验良好的商品详情页对于提高用户转化率至关重要。本文将分享我在使用UniApp开发商品详情页时的实践经验,并特别关注如何适配鸿蒙系统…...
VMware中快速安装与优化Ubuntu全攻略
准备工作 在开始安装之前,确保已经下载了VMware Workstation或VMware Player,并准备好Ubuntu的ISO镜像文件。VMware Workstation是一款功能强大的虚拟机软件,支持在Windows或Linux主机上运行多个操作系统。 创建虚拟机 打开VMware Worksta…...
本地 PC 使用Offset Explorer连接实体Ubuntu Kafka 【单机】超时问题解决
现状:本地 PC 使用Offset Explorer连接实体Ubuntu Kafka 超时 一、确认kafka是否在9092端口上运行 netstat -tulnp | grep 9092输出 tcp6 0 0 :::9092 :::* LISTEN 66113/java 使用jps查看进程66113的详细信息…...
CSS AI 通义灵码 VSCode插件安装与功能详解
简介 在前端开发领域,页面调试一直是个繁琐的过程,而传统开发中美工与前端的对接也常常出现问题。如今,阿里云技术团队推出的通义灵码智能编码助手,为前端开发者带来了新的解决方案,让开发者可以像指挥者一样…...
MUSE Pi Pro 使用TiTanTools烧录镜像
视频讲解: MUSE Pi Pro 使用TiTanTools烧录镜像 下载windows下的烧录工具 https://cloud.spacemit.com/prod-api/release/download/tools?tokentitantools_for_windows_X86_X64 下载镜像文件,zip后缀的即可 打开软件默认界面 按住FDL键,同时…...
嵌软面试每日一阅----通信协议篇(二)之TCP
一. TCP和UDP的区别 可靠性 TCP:✅ 可靠传输(三次握手 重传机制) UDP:❌ 不可靠(可能丢包) 连接方式 TCP:面向连接(需建立/断开连接) UDP:无连接࿰…...
开机自启动python程序_ubuntu22.04
一、没有设置开机自启动时 1、 conda activate yolo cd /home/orangepi/work_11.15/zipformer 2、 python app.py 二、设置开机自启动流程 1、新建一个文件.service文件 touch zipformer.service 2、最重要的找到你自己的环境路径 这个是我的 yolo的虚拟环境在ÿ…...
8、SpringBoot集成MinIO
8、SpringBoot集成MinIO https://xiaoxueblog.com/ai/SpringBoot%E9%9B%86%E6%88%90MinIO.html 1、pom <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.12</version> </dependency>2…...
LeRobot 框架的核心架构概念和组件(下)
本文档概述构成 LeRobot 框架的核心架构概念和组件。它介绍主要的子系统,并解释它们如何相互作用以实现机器人学习。 。。。。。。继续。。。。。。 机器人控制系统 机器人控制系统提供统一的接口来控制实体机器人。它支持不同的控制模式和机器人类型,…...
ubuntu18 设置静态ip
百度 编辑/etc/netplan/01-netcfg.yaml 系统没有就自己编写 network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [192.168.20.8/24] # 设置你的IP地址和子网掩码 gateway4: 192.168.20.1 # 网关地址 namese…...
QML元素 - ThresholdMask
QML 的 ThresholdMask 用于根据阈值将源元素与遮罩元素的像素值进行比较,通过设定阈值范围来控制源元素的可见区域。它适用于基于亮度、透明度或颜色通道的动态遮罩效果,例如游戏中的血条、进度指示器或图像处理中的抠图。以下是详细使用技巧和场景示例&…...
[项目深挖]仿muduo库的并发服务器的解析与优化方案
标题:[项目深挖]仿muduo库的并发服务器的优化方案 水墨不写bug 文章目录 一、buffer 模块(1)线性缓冲区直接扩容---->环形缓冲区定时扩容(只会扩容一次)(2)使用双缓冲(Double Buf…...
(独家)SAP CO模块中 销售发票对应的Cost Document中的PSG对象是什么东东??
背景: 在销售发票生成的凭证中,控制凭证有两个字段:对象类型、对应编码;那这个PSG到底是什么东东?网上一直没人解释,可能没人研究过这个问题。 官方解释: 按我的理解,PSG profile …...
流程编辑器Bpmn与LogicFlow学习
工作流技术如何与用户交互结合(如动态表单、任务分配)处理过 XML 与 JSON 的转换自定义过 bpmn.js 的样式(如修改节点颜色、形状、图标)扩展过上下文菜单(Palette)或属性面板(Properties Panel&…...
群晖NAS部署PlaylistDL音乐下载器结合cpolar搭建私有云音乐库
文章目录 前言1.关于PlaylistDL音乐下载器2.Docker部署3.PlaylistDL简单使用4.群晖安装Cpolar工具5.创建PlaylistDL音乐下载器的公网地址6.配置固定公网地址总结 前言 各位小伙伴们,你们是不是经常为了听几首歌而开通各种平台的VIP?或者为了下载无损音质…...
Unity光照笔记
问题 在做项目中遇到了播放中切换场景后地面阴影是纯黑的问题,不得不研究一下光照。先放出官方文档。 Lighting 窗口 - Unity 手册 播放中切换场景后地面阴影是纯黑 只有投到地面的阴影是纯黑的。且跳转到使用相同Terrain的场景没有问题。 相关文章:…...
【ROS2】编译Qt实现的库,然后链接该库时,报错:/usr/bin/ld: XXX undefined reference to `vtable for
1、问题描述 在ROS2工程中,编译使用Qt实现的库,在其它ROS2包链接该库时,报错: /usr/bin/ld: XXX undefined reference to `vtable for2、原因分析 查看链接失败的几个函数接口都是,信号函数(signals 标记的函数)。因为信号函数都只有定义,没有实现,在执行ROS2 colc…...