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

2024.12.30(多点通信)

作业:
1、将广播发送和接收端实现一遍,完成一个发送端发送信息,对应多个接收端接收信息实验。

发送端

#include <myhead.h>#define PORT 8888
#define IP "192.168.124.255"int main(int argc, const char *argv[])
{//1、将广播发送和接收端实现一遍,//完成一个发送端发送信息,对应多个接收端接收信息实验。//1.创建套接字int oldfd = socket(AF_INET,SOCK_DGRAM,0);if(oldfd == -1){perror("socket");return -1;}//设置允许广播int k = 11;if(setsockopt(oldfd,SOL_SOCKET,SO_BROADCAST,&k,sizeof(k))==-1){perror("setsockopt");return -1;}printf("允许广播设置成功\n");struct sockaddr_in broadcast = {.sin_family = AF_INET,.sin_port = htons(PORT), 	//发送到该端口.sin_addr.s_addr = inet_addr(IP)};char buff[1024];while(1){fgets(buff,sizeof(buff),stdin);sendto(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&broadcast,sizeof(broadcast));if(strcmp(buff,"quit")==0){printf("发送端退出\n");break;}}close(oldfd);return 0;
}

接收端

#include <myhead.h>
#define PORT 8888
#define IP "192.168.124.255"int main(int argc, const char *argv[])
{//1.创建套接字int oldfd = socket(AF_INET,SOCK_DGRAM,0);if(oldfd == -1){perror("socket");return -1;}//填充广播地址信息结构体struct sockaddr_in send = {.sin_family = AF_INET,.sin_port = htons(PORT),.sin_addr.s_addr = inet_addr(IP)};if(bind(oldfd,(struct sockaddr *)&send,sizeof(send))==-1){perror("bind");return -1;}//接收消息char buff[1024];while(1){recvfrom(oldfd,buff,sizeof(buff),0,NULL,NULL);printf("%s",buff);}return 0;
}

2、使用多线程基于TCP协议的并发执行,一个服务器对应多个客户端实现通信实验。

服务器

#include <myhead.h>
#define PORT 8888
#define IP "192.168.124.123"void *fun(void *fd)
{int newfd = *(int *)fd;char buff[1024];while(1){int res = recv(newfd,buff,sizeof(buff),0);if(res == 0){printf("客户端下线\n");break;}strcat(buff,"霜之哀伤");printf("%s\n",buff);send(newfd,buff,sizeof(buff),0);bzero(buff,sizeof(buff));}//循环结束(客户端下线)子线程退出pthread_exit(NULL); 
}
int main(int argc, const char *argv[])
{//2、使用多线程基于TCP协议的并发执行,//一个服务器对应多个客户端实现通信实验。//1.创建套接字int oldfd = socket(AF_INET,SOCK_STREAM,0);if(oldfd == -1){perror("socket");return -1;}//绑定struct sockaddr_in aaa = {.sin_family = AF_INET,.sin_port = htons(PORT),.sin_addr.s_addr = inet_addr(IP)};if(bind(oldfd,(struct sockaddr *)&aaa,sizeof(aaa))==-1){perror("bind");return -1;}//监听if(listen(oldfd,20)==-1){perror("listen");return -1;}struct sockaddr_in client;int client_len = sizeof(client);pthread_t tid;int newfd;while(1){//接收新客户端连入请求newfd = accept(oldfd,(struct sockaddr *)&client,&client_len);if(newfd == -1){perror("accept");return -1;}//创建子线程与客户端通话if(pthread_create(&tid,NULL,fun,&newfd)==-1){perror("pthread_create");return -1;}}pthread_join(tid,NULL); 	//回收子线程资源close(newfd);close(oldfd);return 0;
}

客户端

#include <myhead.h>
#define IP "192.168.124.123"
#define PORT 8888int main(int argc, const char *argv[])
{//1.创建套接字int oldfd = socket(AF_INET,SOCK_STREAM,0);if(oldfd == -1){perror("socket");return -1;}//连接服务器struct sockaddr_in aaa = {.sin_family = AF_INET,.sin_port = htons(PORT),.sin_addr.s_addr = inet_addr(IP)};if(connect(oldfd,(struct sockaddr *)&aaa,sizeof(aaa))==-1){perror("connect");return -1;}//收发消息char buff[1024];while(1){fgets(buff,sizeof(buff),stdin);buff[strlen(buff)-1] = '\0';send(oldfd,buff,strlen(buff),0);if(strcmp(buff,"quit")==-1){printf("服务器退出成功\n");}bzero(buff,sizeof(buff));recv(oldfd,buff,strlen(buff),0); 		//阻塞接收服务器消息printf("服务器发来消息:%s\n",buff);}return 0;
}

笔记

1、对于套接字而言,在不同的层中,可以设置不同的属性,如端口号快速重用、超时时间、设置广播、加入多播组等等

2、关于网络属性,有两个函数,分别是 setsockopt、getsockopt

        #include <sys/types.h> /* See NOTES */

        #include <sys/socket.h>

        int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);

        功能:获取套接字某些选项的属性。

        参数1:套接字描述符

        参数2:要获取的层级

        参数3:要获取的操作名称

        参数4:获取的值为         0:表示禁用,

                                                非0表示启用。

        参数5:参数4的大小。

        返回值:成功返回0,失败返回-1,并置位错误码

        int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

        功能:设置套接字某些选项的属性。

        参数1:套接字描述符

        参数2:要设置的层级

        参数3:要设置的操作名称

        参数4:设置的值, 0:表示禁用,

                                        非0表示启用。

        参数5:参数4的大小。

        返回值:成功返回0,失败返回-1,并置位错误码

eg:获取当前端口号是否能快速复用属性:

        int n;

        int len = sizeof(n);

        getsockopt(oldfd,SOL_SOCKET,SO_REUSEADDR,&n,&len);

        如果n==0表示端口号快速复用未启动。

        如果n!=0表示端口号快速复用启动。

        eg:设置当前套接字端口号能快速复用

        int n =999;

        setsockopt(oldfd,SOL_SOCKET,SO_REUSEADDR,&n,sizeof(n));

        启动端口号快速复用功能。

#include <myhead.h>int main(int argc, const char *argv[])
{int oldfd = socket(AF_INET,SOCK_STREAM,0);int n;int len = sizeof(n);getsockopt(oldfd,SOL_SOCKET,SO_REUSEADDR,&n,&len);printf("端口号复用状态:%d\n",n);n = 1;setsockopt(oldfd,SOL_SOCKET,SO_REUSEADDR,&n,sizeof(n));printf("端口号修改为可复用状态后:%d\n",n);return 0;
}

2.单播

1>.单播发生在主机之间一对一的通信模式,交换机或者路由器只对数据进行转发,不做复制

2> 每次只有两个实体之间进行相互通信,发送端和接收端都是唯一确定的

3.广播

1>主机之间的一对多的通信模式,网络对其中的每一台主机发出的信息都进行复制并转发

2>所有主机都可以收到广播消息(无论你是否愿意接收),所以,广播是基于UDP通信模式

3> 广播地址:网络号 + 255

例如:主机地址为192.168.125.171 ---> 192.168.125.255

4> 广播消息是不能穿过路由器的,也就是说广播消息禁止在外网上进行传播,所以广播只能完成局域网内的多点通信

1、广播的发送端模型 ----> 类似于UDP的客户端

模式

1> socket 创建套接字

2> setsockopt 设置网络属性,允许广播

3> bind 非必须绑定(绑定的话每次发送端口都是固定的)

4> 填广播地址信息结构体

ip:填广播地址(192.168.125.255)

port:与接收端保持一致

5> sendto 发送消息

6> close 关闭套接字

#include <myhead.h>#define PORT 6666
#define IP "192.168.124.255"
int main(int argc, const char *argv[])
{//1、创建套接字int oldfd = socket(AF_INET,SOCK_DGRAM,0);if(oldfd==-1){perror("socket");return -1;}//2、设置允许广播int k = 999;if(setsockopt(oldfd,SOL_SOCKET,SO_BROADCAST,&k,sizeof(k))==-1){perror("setsockopt");return -1;}printf("允许广播设置成功\n");struct sockaddr_in broadcast = {.sin_family = AF_INET,.sin_port = htons(PORT),//发送到该端口.sin_addr.s_addr = inet_addr(IP)};char buff[1024];while(1){fgets(buff,sizeof(buff),stdin);sendto(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&broadcast,sizeof(broadcast));if(strcmp(buff,"quit")==0){printf("发送端退出\n");break;}}close(oldfd);return 0;
}

2、广播的接收端模型 ----> 类似于UDP的服务器端

模式

1> socket 创建套接字

2> 填充地址信息结构体

ip:广播地址(192.168.125.255)

port:与发送端保持一致

3> bind 绑定端口号与ip地址

4> recvfrom 接收消息

5> close 关闭套接字

发送源的负担:广播 > 组播 > 单播

特点:

1、广播地址选取broadcast对应的IP

2、端口号固定

3、发送端不需要绑定固定的IP和端口号,只需要向固定的IP和端口号(广播地址)发送信息即可,

不需要关注谁来接收。

4、接收端必须绑定IP和端口号(广播地址)

5、如果发送端绑定了IP和端口号之后,接收端就无法再次绑定,也无法接收信息。

4、组播(多播)

1、 组播也是实现主机之间一对多的通信模型,跟广播不同的是,组播发送的消息,只有加入多播组的成员才能收到,没有加入的就无法收到,不会占用柜台的网络带宽。

2> 组播也是使用UDP实现。

3> 组播地址:就是D类网络,224.0.0.0 -- 239.255.255.255

2、 组播的发送端模型 --->类似于UDP的客户端

模式

1> socket 创建套接字

2> bind 非必须绑定

3> 填充接收端地址信息结构体

ip:组播地址,与接收端保持一致(224.0.0.0 -- 239.255.255.255)

port:与接收端保持一致

4> sendto 发送组播消息

5> close 关闭套接字

组播发送端:

特点:

1、发送端发送给组播组IP和端口号。

2、发送端不需要绑定自己的IP和端口号,只需要发送到组播地址即可。

#include <myhead.h>
#define PORT 6666
#define IP "192.168.124.172"
int main(int argc, const char *argv[])
{//1、创建套接字int oldfd = socket(AF_INET,SOCK_DGRAM,0);if(oldfd==-1){perror("socket");return -1;}
#if 0//2、绑定struct sockaddr_in send = {.sin_family = AF_INET,.sin_port = htons(PORT),.sin_addr.s_addr = inet_addr(IP)};if(bind(oldfd,(struct sockaddr *)&send,sizeof(send))==-1){perror("bind");return -1;}
#endif//3、发送接收struct sockaddr_in group = {.sin_family = AF_INET,.sin_port = htons(8888),//组播端口号.sin_addr.s_addr = inet_addr("224.1.2.3")//组播IP地址};char buff[1024];while(1){fgets(buff,sizeof(buff),stdin);buff[strlen(buff)-1] = '\0';sendto(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&group,sizeof(group));}return 0;
}

3、组播的接收端模型 ---> 类似于UDP的服务器

1> socket 创建套接字

2> setsockopt 设置网络属性(加入多播组)

设置层级:IPPROTO_IP

设置属性:IP_ADD_MEMBERSHIP

struct ip_mreqn {

        struct in_addr imr_multiaddr; /* 组播IP*/

        struct in_addr imr_address; /* 本机IP*/

        int imr_ifindex; /* 网卡索引 */ };

3> 填充地址信息结构体然后bind

ip:组播IP,与发送端保持一致

port :与发送端保持一致

4> 定义发送方结构体,接收发送方信息

5> recvfrom 接收消息

6> close 关闭套接字

特点:

1、设置允许加入组播组(发送端的IP),设置加入组播组时需要(组播组IP,自己的IP,自己网卡ens33的索引号一般都是2)

2、查找自己网卡的索引号:ip addr show或者ip ad。

3、绑定时绑定的是组播组IP和发送端IP保持一致。

4、接收端也可以选择不接收发送方信息,recvfron最后两个参数填NULL即可。

#include <myhead.h>
#define ZIP "224.1.2.3"
#define IP "192.168.60.66"
#define PORT 7777
int main(int argc, const char *argv[])
{//1、创建基于UDP的套接字int oldfd = socket(AF_INET,SOCK_DGRAM,0);if(oldfd==-1){perror("socket");return -1;}//2、设置允许加入组播组struct ip_mreqn recv = {.imr_multiaddr.s_addr = inet_addr(ZIP),//组播组IP.imr_address.s_addr = inet_addr(IP),//本机IP.imr_ifindex = 2 //ens33网卡索引号};if(setsockopt(oldfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&recv,sizeof(recv))==-1){perror("setsockopt");return -1;}//3、绑定struct sockaddr_in recv2 = {.sin_family = AF_INET,.sin_port = htons(PORT),.sin_addr.s_addr = inet_addr(ZIP)//绑定组播组IP};if(bind(oldfd,(struct sockaddr *)&recv2,sizeof(recv2))==-1){perror("bind");return -1;}//4、接收信息struct sockaddr_in send;socklen_t send_len = sizeof(send);char buff[1024];while(1){recvfrom(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&send,&send_len);//recvfrom(oldfd,buff,sizeof(buff),0,NULL,NULL);不接收发送方的信息printf("接收到%s发送来的信息:%s\n",inet_ntoa(send.sin_addr),buff);if(strcmp(buff,"quit")==0){printf("接收端也退出\n");break;}}close(oldfd);return 0;
}

思维导图

相关文章:

2024.12.30(多点通信)

作业&#xff1a; 1、将广播发送和接收端实现一遍&#xff0c;完成一个发送端发送信息&#xff0c;对应多个接收端接收信息实验。 发送端 #include <myhead.h>#define PORT 8888 #define IP "192.168.124.255"int main(int argc, const char *argv[]) {//1、…...

前端路由layout布局处理以及菜单交互(三)

上篇介绍了前端项目部署以及基本依赖的应用&#xff0c;这次主要对于路由以及布局进行模块化处理 一、 创建layout模块 1、新建src/layout/index.vue <template><el-container class"common-layout"><!-- <el-aside class"aside">&l…...

Zynq PS端外设之GPIO

1. GPIO&#xff08;通用输入/输出&#xff09; GPIO外设有4个Bank&#xff0c;Bank0/1通过MIO连接到PS的引脚上&#xff1b;Bank2/3通过EMIO连接到PL的引脚上。 注意&#xff1a;Bank1的电平要改成LVCOMS 1.8 GPIO寄存器 寄存器&#xff1a; DATA_RO&#xff1a; 读取GPIO的输…...

Java 操作 PDF:从零开始创建功能丰富的PDF文档

Java 操作 PDF&#xff1a;从零开始创建功能丰富的PDF文档 引言环境准备依赖引入 创建PDF文档一键生成空白PDF添加表单字段&#xff08;选项&#xff09;添加电子签名添加公章图像 结论 引言 随着数字化办公的普及&#xff0c;PDF格式因其跨平台兼容性和安全性而被广泛应用于各…...

12.30-1-5学习周报

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 文章链接摘要Abstract一、方法介绍1.HAT-CIR2.Horde3.DWGRNet 二、实验总结 文章链接 https://arxiv.org/pdf/2405.04101 摘要 本博客介绍了论文《Continual lea…...

H3C Tftp 备份与恢复配置文件

pc 运行 tftp 软件与路由器相连。打开 tftp。 在交换机用户试图下&#xff0c;dir /all 命令查看设备的配置文件。 备份命令&#xff1a;将配置文件备份到地址为 10.10.10.2 的 tftp 服务器 <H3C>backup startup-configuration to 10.10.10.2 恢复命令&#xff1a;恢复配…...

【Matlab算法】基于改进人工势场法的移动机器人路径规划研究(附MATLAB完整代码)

基于改进人工势场法的移动机器人路径规划研究 结果图摘要1. 引言2. 方法说明2.1 基本原理2.2 改进策略3. 核心函数解释3.1 改进的斥力计算函数3.2 路径规划主函数4. 实验设计4.1 实验环境设置4.2 关键参数选择5. 结果分析5.1 实验结果5.2 性能分析附录:完整代码参考文献结果图…...

基于Springboot校园失物招领系统【附源码】

基于Springboot校园失物招领系统 效果如下&#xff1a; 系统登陆页面 物品页面 系统首页面 失物招领管理页面 失物认领页面 宣传视频页面 物品挂失留言管理页面 宣传视频类型管理页面 研究背景 在校园环境中&#xff0c;失物招领是一个常见的问题。传统的失物招领方式主要依…...

Vue 自定义指令

首先&#xff0c;我们知道vue中有很多自带指令&#xff0c;v-bind、v-on、v-model等。但在业务开发中&#xff0c;我们常见一些自定义指令如&#xff1a;v-copy、v-longpress等。那么如何定义自己所需的指令呢&#xff1f; 接下来我们分别从指令注册、指令的钩子函数、指令的参…...

JAVA-制作小游戏期末实训

源码 import game.frame.Frame;public class App {public static void main(String[] args) {System.out.println("starting......");new Frame();} } package game.controller;import game.model.Enemy;public class EnemyController implements Runnable{private…...

【Vue教程】使用Vite快速搭建前端工程化项目 | Vue3 | Vite | Node.js

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f6a9;今天毛毛张分享的是关于如何快速&#x1f3c3;‍♂️搭建一个前端工程化的项目的环境搭建以及流程&#x1f320; 文章目录 1.前端工程化环境搭建&#…...

4.CSS文本属性

4.1文本颜色 div { color:red; } 属性值预定义的颜色值red、green、blue、pink十六进制#FF0000,#FF6600,#29D794RGB代码rgb(255,0,0)或rgb(100%,0%,0%) 4.2对齐文本 text-align 属性用于设置元素内文本内容的水平对齐方式。 div{ text-align:center; } 属性值解释left左对齐ri…...

【工具整理】WIN换MAC机器使用工具整理

最近公司电脑升级&#xff0c;研发同学统一更换了 Mac Book Pro 笔记版电脑&#xff0c;整理一下安装了那些软件以及出处&#xff0c;分享记录下&#xff5e; 知识库工具 1、语雀 网址&#xff1a;语雀&#xff0c;为每一个人提供优秀的文档和知识库工具 语雀 个人花园&…...

Elasticsearch向量检索需要的数据集以及768维向量生成

Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一&#xff1a;使用fromsize实现分页 快速掌握Elasticsearch检索之二&#xff1a;滚动查询(scrool)获取全量数据(golang) Elasticsearch检索之三&#xff1a;官方推荐方案search_after…...

《小型支付商城系统》项目(一)DDD架构入门

目录 1.DDD架构 1.1充血模型 1.2领域模型 1.2.1实体 1.2.2值对象 1.2.3聚合 1.2.4领域服务 1.2.5工厂 1.2.6仓储&#xff08;Repository&#xff09; 2.DDD建模 3.DDD工程模型 项目介绍&#xff1a;知识星球 | 深度连接铁杆粉丝&#xff0c;运营高品质社群&#xff…...

web课程设计--酷鲨商城-springboot和vue

文章目录 页面截图技术分析数据库代码地址 页面截图 登陆页面: 分类列表 添加分类 轮播图列表 添加轮播图 商品列表 添加商品信息 技术分析 前端使用 html页面的 vue.js&#xff08;vue2&#xff09;和element-ui绘制前端界面 后台使用Springbootmybatis来实现crud。还有一…...

解决virtualbox克隆ubuntu虚拟机之后IP重复的问题

找遍了国内论坛&#xff0c;没一个能解决该问题的&#xff0c;所以我自己写个文章吧&#xff0c;真讨厌那些只会搬运的&#xff0c;污染国内论坛环境&#xff0c;搜一个问题&#xff0c;千篇一律。 问题 操作系统版本为"Ubuntu 24.04 LTS" lennytest1:~$ cat /etc…...

活动预告 |【Part1】Microsoft Azure 在线技术公开课:使用 Azure DevOps 和 GitHub 加速开发

课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft Cloud 技术的了解。参加我们举办的“使用 Azure DevOps 和 GitHub 加速开发”活动&#xff0c;了解迁移到 DevOps 所需的合适工具和…...

SpiderFlow平台v0.5.0之数据库连接

一、寻找lib目录安装方式 在 SpiderFlow 平台中&#xff0c;连接数据库时需要指定数据库的 DriverClassName&#xff0c;并确保正确配置数据库驱动。通常&#xff0c;驱动文件&#xff08;JAR 文件&#xff09;需要放置在指定的文件夹中&#xff0c;以便 SpiderFlow 可以找到并…...

springboot集成阿里云短信服务

springboot集成阿里云短信服务 一.阿里云账号准备 流程:注册阿里云账号>短信服务>新增资质>新建签名>新建模版>申请秘钥>用代码测试 1.注册阿里云账号 2、登录成功后&#xff0c; ① 在首页搜索短信服务 ② 打开第一个搜索结果 ③ 免费开通 ④ 可以根据…...

Redis 实战篇 ——《黑马点评》(上)

《引言》 在进行了前面关于 Redis 基础篇及其客户端的学习之后&#xff0c;开始着手进行实战篇的学习。因内容很多&#xff0c;所以将会分为【 上 中 下 】三篇记录学习的内容与在学习的过程中解决问题的方法。Redis 实战篇的内容我写的很详细&#xff0c;为了能写的更好也付出…...

Redis的生态系统和社区支持

Redis的生态系统和社区支持 1. Redis 生态系统 1.1 Redis核心 Redis 是一个高性能的内存存储系统,支持丰富的数据结构(如字符串、列表、集合、哈希和有序集合)。它的核心提供了: 高性能数据存储:单线程模型支持每秒数百万级别的操作。多种数据结构:适用于多样化场景,如…...

基于C语言从0开始手撸MQTT协议代码连接标准的MQTT服务器,完成数据上传和命令下发响应(华为云IOT服务器)

文章目录 一、前言二、搭建开发环境三、网络编程基础概念科普3.1 什么是网络编程3.2 TCP 和 UDP协议介绍3.3 TCP通信的实现过程 四、Windows下的网络编程相关API介绍4.1 常用的函数介绍4.2 函数参数介绍4.3 编写代码体验网络编程 五、访问华为云IOT服务器创建一个产品和设备5.2…...

什么是 GPT?Transformer 工作原理的动画展示

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 目录 1 图解 “Generative Pre-trained Transformer”&#xff08;GPT&#xff09; 1.1 Generative&#xff1a;生成式 1.1.1 可视化 1.1.2 生成式 vs. 判别式&#xff08;译注&#xff09; 1.2 Pr…...

IDEA 编辑器自动识别 Dockerfile 类型高亮和语法提示

在 IDEA 中&#xff0c;如果项目里面的只有一个 Dockerfile文件时&#xff0c;那么此时使用打开这个文件都是 ok 的&#xff0c;支持语法高亮和关键词提示。 如果我们有多个 Dockerfile 时&#xff0c; 比如 A_Dockerfile , B_Dockerfile , C_Dockerfile, 这个时候你会发现 IDE…...

AI知识库与用户行为分析:优化用户体验的深度洞察

在当今数字化时代&#xff0c;用户体验&#xff08;UX&#xff09;已成为衡量产品成功与否的关键指标之一。AI知识库作为智能客服系统的重要组成部分&#xff0c;不仅为用户提供快速、准确的信息检索服务&#xff0c;还通过用户行为分析&#xff0c;为产品优化提供了深度洞察。…...

什么是Redis哨兵机制?

大家好&#xff0c;我是锋哥。今天分享关于【什么是Redis哨兵机制&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是Redis哨兵机制&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 哨兵&#xff08;Sentinel&#xff09;机制是 Redis 提…...

JavaScript中如何创建对象

在JavaScript中&#xff0c;创建对象有多种方法。以下是几种常见的方式&#xff1a; 1. 对象字面量 这是最直接和常用的创建对象的方法。使用花括号 {} 包围一组键值对来定义一个对象。 let person {name: "John",age: 30,greet: function() {console.log("…...

2025:OpenAI的“七十二变”?

朋友们&#xff0c;准备好迎接AI的狂欢了吗&#xff1f;&#x1f680; 是不是跟我一样&#xff0c;每天醒来的第一件事就是看看AI领域又有什么新动向&#xff1f; 尤其是那个名字如雷贯耳的 OpenAI&#xff0c;简直就是AI界的弄潮儿&#xff0c;一举一动都牵动着我们这些“AI发…...

Mysql(MGR)和ProxySQL搭建部署-Kubernetes版本

一、Mysql(MGR) 1.1 statefulSet.yaml apiVersion: apps/v1 kind: StatefulSet metadata:labels:app: mysqlname: mysqlnamespace: yihuazt spec:replicas: 3serviceName: mysql-headlessselector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:affinity:p…...

uni-app 多平台分享实现指南

uni-app 多平台分享实现指南 在移动应用开发中&#xff0c;分享功能是一个非常常见的需求&#xff0c;尤其是在社交媒体、营销活动等场景中。使用 uni-app 进行多平台开发时&#xff0c;可以通过一套代码实现跨平台的分享功能&#xff0c;涵盖微信小程序、H5、App 等多个平台。…...

Windows系统下载、部署Node.js与npm环境的方法

本文介绍在Windows电脑中&#xff0c;下载、安装并配置Node.js环境与npm包管理工具的方法。 Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;其允许开发者使用JavaScript编写命令行工具和服务器端脚本。而npm&#xff08;Node Package Manager&#xff09;则…...

Typora 最新版本下载安装教程(附详细图文)

文章简介 在当今快节奏的信息化时代&#xff0c;简洁高效的写作工具成为了每位内容创作者的必需品。而Typora&#xff0c;这款备受推崇的 Markdown 编辑器&#xff0c;正是为此而生。它采用无缝设计&#xff0c;去除了模式切换、预览窗口等干扰&#xff0c;带来真正的实时预览…...

将一个变量声明为全局变量比如:flag1=false;然后通过jQuery使用js一个方法,将它设置为不可修改

方法 1&#xff1a;使用 Object.defineProperty 通过 Object.defineProperty 将全局变量设置为只读属性。 // 声明全局变量 var flag1 false;// 使用 Object.defineProperty 将其设置为不可修改 Object.defineProperty(window, flag1, {configurable: false, // 不允许删除属…...

找不到qt5core.dll无法运用软件的解决办法

在运行某些软件或游戏时&#xff0c;部分用户会遇到电脑显示由于找不到qt5core.dll&#xff0c;无法继续执行代码的问题&#xff0c;下面就给大家分享几种简单的解决方法&#xff0c;轻松恢复软件正常运行。 导致qt5core.dll缺失的原因 qt5core.dll是 Qt 应用程序框架的一部分…...

集线器,交换机,路由器,mac地址和ip地址知识记录总结

一篇很不错的视频简介 基本功能 从使用方面来说&#xff0c;都是为了网络传输的标识&#xff0c;和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器&#xff0c;下面是区别&#xff1a; 集线器 集线器&#xff1a;一个简单的物理扩展接口数量的物理硬件。…...

Javascript算法——回溯算法(组合问题)

相关资料来自《代码随想录》&#xff0c;版权归原作者所有&#xff0c;只是学习记录 回溯 回溯模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&#xff08;树中节点孩子的数量就是集合的大小&#xff09;) {处理节点…...

【人工智能机器学习基础篇】——深入详解无监督学习之聚类,理解K-Means、层次聚类、数据分组和分类

深入详解无监督学习之聚类&#xff1a;如K-Means、层次聚类&#xff0c;理解数据分组和分类 无监督学习是机器学习中的一个重要分支&#xff0c;旨在从未标注的数据中发现潜在的结构和模式。聚类&#xff08;Clustering&#xff09;作为无监督学习的核心任务之一&#xff0c;广…...

从0到机器视觉工程师(二):封装调用静态库和动态库

目录 静态库 编写静态库 使用静态库 方案一 方案二 动态库 编写动态库 使用动态库 方案一 方案二 方案三 总结 静态库 静态库是在编译时将库的代码合并到最终可执行程序中的库。静态库的优势是在编译时将所有代码包含在程序中&#xff0c;可以使程序独立运行&…...

Mybatis的set标签,动态SQL

set标签常用于update语句中&#xff0c;搭配if标签使用 set标签的作用 1、会动态加上前置set关键字 2、可以删除无关的逗号 示例代码&#xff1a; <update id"update">update employee<set><if test"name ! null">name #{name},<…...

机器学习-感知机-神经网络-激活函数-正反向传播-梯度消失-dropout

文章目录 感知机工作流程 神经网络区别各种各样的神经网络 激活函数激活函数类型Sigmoid 函数ReLU函数Leaky ReLU 函数Tanh 函数 正向传播反向传播梯度消失(gradient vanish)如何解决 Dropout使用 PyTorch实战神经网络算法(手写MNIST数字识别)viewsoftmax和log-softmaxcross-en…...

HTML5 时间选择器详解

HTML5 的时间选择器&#xff08;Time Picker&#xff09;允许用户通过图形界面选择时间。它通过设置 <input> 元素的 type 属性为 time 来实现。以下是关于 HTML5 时间选择器的详细讲解。 HTML5 时间选择器详解 1. 基本用法 要创建一个时间选择器&#xff0c;只需使用…...

SSM-Spring-AOP

目录 1 AOP实现步骤&#xff08;以前打印当前系统的时间为例&#xff09; 2 AOP工作流程 3 AOP核心概念 4 AOP配置管理 4-1 AOP切入点表达式 4-1-1 语法格式 4-1-2 通配符 4-2 AOP通知类型 五种通知类型 AOP通知获取数据 获取参数 获取返回值 获取异常 总结 5 …...

小红书笔记详情API分析及读取深度探讨

一、引言 随着社交电商的蓬勃发展&#xff0c;小红书凭借其独特的社区氛围和强大的内容生产能力&#xff0c;吸引了大量用户和开发者。对于开发者而言&#xff0c;小红书提供的API接口是获取其丰富内容的重要途径。本文将对小红书笔记详情API进行深入分析&#xff0c;并详细阐…...

【Yarn】通过JMX采集yarn相关指标的Flink任务核心逻辑

通过JMX采集yarn相关指标的Flink任务核心逻辑 文章目录 通过JMX采集yarn相关指标的Flink任务核心逻辑通过jmx接口查询Yarn队列指标请求JMX配置项核心处理流程输出到kafka格式通过jmx接口查询ResourceManager核心指标请求JMX读取配置yaml配置文件核心处理逻辑输出Kafka格式彩蛋 …...

【网络安全】PostMessage:分析JS实现XSS

前言 PostMessage是一个用于在网页间安全地发送消息的浏览器 API。它允许不同的窗口&#xff08;例如&#xff0c;来自同一域名下的不同页面或者不同域名下的跨域页面&#xff09;进行通信&#xff0c;而无需通过服务器。通常情况下&#xff0c;它用于实现跨文档消息传递&…...

基于springboot的码头船只货柜管理系统 P10078

项目说明 本号所发布的项目均由我部署运行验证&#xff0c;可保证项目系统正常运行&#xff0c;以及提供完整源码。 如需要远程部署/定制/讲解系统&#xff0c;可以联系我。定制项目未经同意不会上传&#xff01; 项目源码获取方式放在文章末尾处 注&#xff1a;项目仅供学…...

SpringMVC(二)原理

目录 一、配置Maven&#xff08;为了提升速度&#xff09; 二、流程&&原理 SpringMVC中心控制器 完整流程&#xff1a; 一、配置Maven&#xff08;为了提升速度&#xff09; 在SpringMVC&#xff08;一&#xff09;配置-CSDN博客的配置中&#xff0c;导入Maven会非…...

计算机网络:网络层知识点及习题(一)

网课资源&#xff1a; 湖科大教书匠 1、概述 网络层实现主机到主机的传输&#xff0c;主要有分组转发和路由选择两大功能 路由选择处理机得出路由表&#xff0c;路由表再生成转发表&#xff0c;从而实现分组从不同的端口转发 网络层向上层提供的两种服务&#xff1a;面向连接…...

题解:A. Noldbach Problem

问题描述 Nick 对素数非常感兴趣。他阅读了有关 Goldbach Problem 的内容&#xff0c;了解到每个大于 2 的偶数都可以表示为两个素数的和。于是他决定创造一个新问题&#xff0c;称为 Noldbach Problem。 Noldbach 问题的定义如下&#xff1a; 如果一个素数 $p$ 满足&#x…...