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

STM32提高篇: 以太网通讯

STM32提高篇: 以太网通讯

  • 一.以太网通讯介绍
  • 二.W5500芯片介绍
    • 1.W5500芯片特点
    • 2.W5500应用目标
    • 3.接入框图
  • 三.驱动移植
  • 四.tcp通讯
  • 五.udp通讯
  • 六.http_server

一.以太网通讯介绍

以太网(Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问控制的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网标准如令牌环、FDDI和ARCNET。
以太网的标准拓扑结构为总线型拓扑,但目前的快速以太网(100BASE-T、1000BASE-T标准)为了减少冲突,将能提高的网络速度和使用效率最大化,使用交换机(Switch hub)来进行网络连接和组织。如此一来,以太网的拓扑结构就成了星型;但在逻辑上,以太网仍然使用总线型拓扑和CSMA/CD(Carrier Sense Multiple Access/Collision Detection,即载波多重存取/碰撞侦测)的总线技术。
经过长期的发展,以太网已成为应用最为广泛的局域网,包括标准以太网(10 Mbit/s)、快速以太网(100 Mbit/s)、千兆以太网(1000 Mbit/s)和万兆以太网(10 Gbit/s)等。IEEE 802.3规范则是基于以太网的标准制定的,并与以太网标准相互兼容。

二.W5500芯片介绍

要进行通讯,需要相应的硬件支持,在嵌入式应用领域,应用最广泛的一个以太网芯片就是W5500,素有以太之王的称号。
是韩国半导体公司WIZnet提供的一款高性价比的以太网芯片。其全球独一无二的全硬件TCPIP协议栈专利技术,解决了嵌入式以太网的接入问题,简单易用,安全稳定,是物联网设备的首选解决方案。
W5500 集成了 TCP/IP 协议栈,10/100M 以太网数据链路层(MAC)及物理层(PHY),使得用户使用单芯片就能够在他们的应用中拓展网络连接。
久经市场考验的WIZnet全硬件 TCP/IP 协议栈支持 TCP,UDP,IPv4,ICMP,ARP,IGMP以及PPPoE协议。W5500内嵌32K字节片上缓存以供以太网包处理。 如果你使用 W5500,你只需要一些简单的Socket编程就能实现以太网应用。这将会比其他嵌入式以太网方案更加快捷、简便。
用户可以同时使用8个硬件Socket独立通讯。 W5500 提供了SPI(外设串行接口)从而能够更加容易与外设 MCU 整合。而且,W5500的使用了新的高效SPI协议支持80MHz 速率,从而能够更好的实现高速网络通讯。为了减少系统能耗,W5500提供了网络唤醒模式(WOL)及掉电模式供客户选择使用。

1.W5500芯片特点

(1)支持硬件TCP/IP协议:TCP,UDP,ICMP,IPv4,ARP,IGMP,PPPoE。
(2)支持8个独立端口(Socket)同时通讯。
(3)支持掉电模式。
(4)支持网络唤醒。
(5)支持高速串行外设接口(SPI模式 0,3)。
(6)内部32K字节收发缓存。
(7)内嵌10BaseT/100BaseTX 以太网物理层(PHY)。
(8)支持自动协商(10/100-Based 全双工/半双工)。
(9)不支持 IP 分片。
(10)3.3V工作电压,I/O 信号口5V耐压。
(11)LED状态显示(全双工/半双工,网络连接,网络速度,活动状态)。
(12)LQFP48无铅封装(7x7mm,间距 0.5mm)

2.W5500应用目标

W5500适合于以下嵌入式应用:
(1)家庭网络设备:机顶盒、个人录像机、数码媒体适配器。
(2)串行转以太网:门禁控制、LED 显示屏、无线 AP 继电器等。
(3)并行转以太网:POS/微型打印机、复印机。
(4)USB 转以太网:存储设备、网络打印机。
(5)GPIO 转以太网:家庭网络传感器。
(6)安全系统:数字录像机、网络摄像机、信息亭。
(7)工厂和楼宇自动化控制系统。
(8)医疗监测设备。
(9)嵌入式服务器。

3.接入框图

在这里插入图片描述

三.驱动移植

注册函数:

void user_register_function(void)
{/* 注册片选函数 */reg_wizchip_cs_cbfunc(wizchip_cs_select, wizchip_cs_deselect);/* 注册spi读写的函数 */reg_wizchip_spi_cbfunc(wizchip_spi_readbyte, wizchip_spi_writebyte);/* 注册临界区函数  (有实时操作系统的时候才会用到) */reg_wizchip_cris_cbfunc(wizchip_cris_enter, wizchip_cris_exit);
}

复位和设置初始地址:

static void App_Eth_RST(void)
{RCC->APB2ENR |= RCC_APB2ENR_IOPGEN;/* pg7:  推挽输出  mode=11 cnf=00 */GPIOG->CRL |= GPIO_CRL_MODE7;GPIOG->CRL &= ~GPIO_CRL_CNF7;/* RST引脚拉低不低于500us */GPIOG->ODR &= ~GPIO_ODR_ODR7;Delay_ms(1);GPIOG->ODR |= GPIO_ODR_ODR7;Delay_ms(100);
}uint8_t ip[]  = {192, 168, 32, 223};
uint8_t ga[]  = {192, 168, 32, 1};
uint8_t sub[] = {255, 255, 255, 0};
uint8_t mac[] = {110, 120, 13, 140, 150, 160};
void    App_Eth_Init(void)
{/* 初始化spi驱动 */Driver_SPI_Init();/* 软重启芯片 */App_Eth_RST();/* 注册函数 */user_register_function();/* 设置ip地址相关 *//* ip地址 */setSIPR(ip);/* mac地址 */setSHAR(mac);/* 子网掩码 */setSUBR(sub);/*  设置网关 */setGAR(ga);printf("ip地址设置完成\r\n");
}

数据导通:
在这里插入图片描述

四.tcp通讯

使用TCP协议
面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP时面向连接的所以只能用端到端的通讯。
在这里插入图片描述
启动TCP服务器:
单片机作为服务器,使用本地电脑连接,成功则打印串口数据。

#define SN 0 /* socket 的编号 */
#define CLIENT 0
#define SERVER 1
uint8_t connected = 0;
uint8_t self = SERVER;
/* 启动一个TCP的服务器 */
void App_Tcp_ServerStart(void)
{self = SERVER;uint8_t status = getSn_SR(SN);// printf("%#x\r\n", status);if(status == SOCK_CLOSED) /* 表示socket已经关闭了 */{uint8_t r = socket(SN, Sn_MR_TCP, 8888, SF_TCP_NODELAY);if(r == SN){printf("socket 0打开成功\r\n");}else{printf("socket 0打开失败 %d\r\n", r);}connected = 0;}else if(status == SOCK_INIT) /* 表示socket的已经打开, 并处于tcp模式 */{/* 监听客户端的连接 */uint8_t r = listen(SN);if(r == SOCK_OK){printf("socket 0监听成功\r\n");}else{printf("socket 0监听失败 %d\r\n", r);}connected = 0;}else if(status == SOCK_CLOSE_WAIT){printf("失去与客户端的连接\r\n");close(SN);}
}

打印成功:
在这里插入图片描述
TCP协议接收数据:

uint8_t  clientIp[4];
uint16_t clientPort;
/* 接收tcp协议传输的数据 */
void App_Tcp_ReceiveData(uint8_t data[], uint16_t *dataLen)
{uint8_t status = getSn_SR(SN);// printf("%#x\r\n", status);if(status == SOCK_ESTABLISHED) /* 表示客户端已经连接成功服务器 */{if(connected == 0 && self == SERVER){/* 获取对方的ip地址和端口号 */getSn_DIPR(SN, clientIp);clientPort = getSn_DPORT(SN);printf("客户端连接建立成功:ip =  %d.%d.%d.%d, port = %d\r\n",clientIp[0],clientIp[1],clientIp[2],clientIp[3],clientPort);connected = 1;}if(getSn_IR(SN) & Sn_IR_RECV) /* 收到tcp数据 */{setSn_IR(SN, Sn_IR_RECV); /* 写1清除 *//* 收到的数据长度 */*dataLen = getSn_RX_RSR(SN);recv(SN, data, *dataLen); /* 接收数据 */}}
}

启动TCP客户端:
单片机作为客户端连接电脑端服务器。

/* 启动一个客户端 */
uint8_t  serverIp[4] = {192, 168, 32, 228}; /* 服务端的ip地址: (电脑的ip地址) */
uint16_t serverPort  = 9999;
void     App_Tcp_ClientStart(void)
{self = CLIENT;uint8_t status = getSn_SR(SN);if(status == SOCK_CLOSED) /* 表示socket已经关闭了 */{uint8_t r = socket(SN, Sn_MR_TCP, 8888, SF_TCP_NODELAY);if(r == SN){printf("socket 0打开成功\r\n");}else{printf("socket 0打开失败 %d\r\n", r);}connected = 0;}else if(status == SOCK_INIT) /* 表示socket的已经打开, 并处于tcp模式 */{/* 客户端需要主动区连接tcp服务器 */int8_t r = connect(SN, serverIp, serverPort);if(r == SOCK_OK){printf("客户端连接服务器成功\r\n");App_Tcp_SendData("hello, this stm32 tcp client!", 29);}else{printf("客户端连接服务器失败 %d\r\n", r);}connected = 0;}else if(status == SOCK_CLOSE_WAIT){printf("失去与服务端的连接\r\n");close(SN);}
}

在这里插入图片描述
TCP协议发送数据:

void App_Tcp_SendData(uint8_t data[], uint16_t dataLen)
{if(dataLen == 0) return;uint8_t status = getSn_SR(SN);if(status == SOCK_ESTABLISHED){send(SN, data, dataLen);}
}

在这里插入图片描述

五.udp通讯

使用UDP协议
面向无连接的通信协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。不需要接收方确认,属于不可靠传输,可能丢包实际使用要求程序员编程验证。
发送数据:

void App_UDP_SendData(uint8_t data[], uint16_t dataLen, uint8_t *sIp, uint16_t sPort)
{uint8_t status = getSn_SR(SN);if(status == SOCK_CLOSED) /* 表示socket已经关闭了 */{uint8_t r = socket(SN, Sn_MR_UDP, 8888, 0);if(r == SN){printf("socket 0打开成功\r\n");}else{printf("socket 0打开失败 %d\r\n", r);}}else if(status == SOCK_UDP){/* 发送数据 */int32_t r = sendto(SN, data, dataLen, sIp, sPort);printf("发送完毕.... %d\r\n", r);}
}

接收数据:

void App_UDP_ReceiveData(uint8_t data[], uint16_t *dataLen, uint8_t *rIp, uint16_t *rPort)
{memset(data, 0, strlen(data));*dataLen = 0;uint8_t status = getSn_SR(SN);if(status == SOCK_CLOSED) /* 表示socket已经关闭了 */{uint8_t r = socket(SN, Sn_MR_UDP, 8888, 0);if(r == SN){printf("socket 0打开成功\r\n");}else{printf("socket 0打开失败 %d\r\n", r);}}else if(status == SOCK_UDP){/* 先判断是否收到数据 */if(getSn_IR(SN) & Sn_IR_RECV){setSn_IR(SN, Sn_IR_RECV);/* 从寄存器读取到数据的长度, 比实际大8个字节 */uint16_t tmp = getSn_RX_RSR(SN);if(tmp > 0){*dataLen = tmp - 8;recvfrom(SN, data, *dataLen, rIp, rPort);}}}
}

在这里插入图片描述

六.http_server

初始化:

void App_HttpSever_Init(void)
{Driver_LED_Init();/* 初始化一个httpserver */httpServer_init(txBuff, rxBuff, 8, sockeList);/* 注册一个网页: 首页 */reg_httpServer_webContent((uint8_t *)"index.html", (uint8_t *)content);
}

启动初始化:

void App_HttpServer_Start(void)
{/* 启动服务器 */for(size_t i = 0; i < sizeof(sockeList); i++){httpServer_run(i);}
}

解析URL和控制小灯:

void App_HttpServer_DoAction(uint8_t action);
// 这个函数由http驱动层调用
void App_HttpServer_ParseUrl(uint8_t url[])
{// /index.html?action=2char *index = strstr((char *)url, "action");if(index != NULL){uint8_t action = (uint8_t)(*(index + 7));App_HttpServer_DoAction(action);}
}
void App_HttpServer_DoAction(uint8_t action)
{if(action == '1'){Drviver_LED_On(LED_2);}else if(action == '2'){Drviver_LED_Off(LED_2);}else if(action == '3'){Drviver_LED_Toggle(LED_2);}
}

相关文章:

STM32提高篇: 以太网通讯

STM32提高篇: 以太网通讯 一.以太网通讯介绍二.W5500芯片介绍1.W5500芯片特点2.W5500应用目标3.接入框图 三.驱动移植四.tcp通讯五.udp通讯六.http_server 一.以太网通讯介绍 以太网&#xff08;Ethernet&#xff09;是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以…...

4-15记录(冒泡排序,快速选择排序)

算法稳定 简单选择排序的实质就是最后一个和第一个比较&#xff0c;小&#xff0c;就换位置&#xff0c;然后继续用最后一个数字和第二个比较&#xff0c;以此类推。 但是算法不稳定&#xff0c;本来下划线的2在后面&#xff0c;但是经过算法后去了前面 快速排序 实现过程&am…...

Ubuntu系统18.04更新驱动解决方法

原始是&#xff1a;ubuntu18.04里面的驱动是470&#xff0c;对应cuda11.4 现在需要更新为525&#xff0c;对应cuda为12.0 实现&#xff1a; 1、打开终端 Ctrl Alt T2、使用 lspci 命令&#xff08;快速查看显卡型号&#xff09; lspci | grep -i vga3、终端输入 ubuntu-d…...

Rocky Linux 9.x 基于 kubeadm部署k8s

搭建集群使用docker下载K8s&#xff0c;使用一主两从模式 主机名IP地址k8s- master192.168.1.141k8s- node-1192.168.1.142k8s- node-2192.168.1.143 一&#xff1a;准备工作 VMware Workstation Pro新建三台虚拟机Rocky Linux 9&#xff08;系统推荐最小化安装&#xff09; …...

MATLAB程序实现了一个物流配送优化系统,主要功能是通过遗传算法结合四种不同的配送策略,优化快递订单的配送方案

%% 主函数部分 % function main()clear; clc; close all;% 生成或加载算例 filename = D:\快递优化\LogisticsInstance.mat; if ~exist(filename, file)instance = generate_instance();save(filename, -struct, instance); elseinstance = load(filename); end% 遗传算法参数配…...

利用宝塔面板搭建RustDesk服务

一、介绍 1.1官网 https://rustdesk.com/ 1.2github仓库 https://github.com/rustdesk/rustdesk 1.3特点 RustDesk 支持多种操作系统&#xff0c;包括 Windows、macOS、Linux、Android 和 iOS。它甚至提供网页版客户端&#xff0c;可以在浏览器中直接使用。 用户可以通过…...

前端与Java后端交互出现跨域问题的14种解决方案

跨域问题是前端与后端分离开发中的常见挑战&#xff0c;以下是14种完整的解决方案&#xff1a; 1 前端解决方案( 开发环境代理) 1.1 Webpack开发服务器代理 // vue.config.js 或 webpack.config.js module.exports {devServer: {proxy: {/api: {target: http://localhost:8…...

PBKDF2全面指南(SpringBoot实现版)

文章目录 第一部分:PBKDF2基础概念1. 什么是PBKDF2?2. 为什么需要PBKDF2?3. PBKDF2的工作原理4. PBKDF2与其他密码散列函数的比较第二部分:在Java和SpringBoot中使用PBKDF21. Java内置的PBKDF2支持2. SpringBoot中集成PBKDF22.1 添加依赖2.2 配置PBKDF2密码编码器2.3 自定义…...

基于RV1126开发板的rknn-toolkit-lite使用方法

1. rknn-toolkit-lite介绍 rknn-toolkit-lite是用于python算法的推理的组件&#xff0c;当前已经在EASY-EAI-Nano完成适配&#xff0c;用户可以用它进行深度学习算法的纯python开发。而且同时支持已经进行了预编译的模型&#xff0c;短短几行代码即可完成算法的推理&#xff0c…...

一款轻量级的PHP地址发布页面源码

源码介绍 一款轻量级的PHP链接发布页面源码&#xff0c;适合快速搭建个性化的链接导航网站&#xff0c;支持动态链接管理和多种风格模板切换 1&#xff1a;后台登录地址为/admin/login.php&#xff0c;提供便捷的配置入口。 2&#xff1a;默认用户名是admin&#xff0c;密码为…...

分布式计算领域的前沿工具:Ray、Kubeflow与Spark的对比与协同

在当今机器学习和大数据领域&#xff0c;分布式计算已成为解决大规模计算问题的关键技术。本文将深入探讨三种主流分布式计算框架——Ray、Kubeflow和Spark&#xff0c;分析它们各自的特点、应用场景以及如何结合它们的优势创建更强大的计算平台。 Spark批量清洗快&#xff0c;…...

【专题刷题】双指针(一)

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;1&#xff0c;本人解法 本人屎山代码&#xff1b;2&#xff0c;优质解法 优质代码&#xff1b;3&#xff0c;精益求精&#xff0c;…...

火山引擎旗下防御有哪些

首先&#xff0c;我需要确认用户是不是打错了&#xff0c;比如把“引擎”当成了“云”&#xff0c;或者他们真的想了解火山引擎的防御机制。火山引擎是字节跳动旗下的云服务平台&#xff0c;类似于阿里云或腾讯云&#xff0c;所以用户可能想了解的是其安全防护措施。 接下来&am…...

python程序打包——nuitka使用

目前python打包成exe的工具主要有&#xff1a;PyInstaller Briefcase py2exe py2app Nuitka CX_Freeze等。 不同于C代码&#xff0c;可以直接编译成可执行的exe文件&#xff0c;或者js代码在浏览器中就能执行&#xff0c;python代码必须通过python解释器来运行&#xff0c…...

编写了一个专门供强化学习玩的贪吃蛇小游戏,可以作为后续学习的playgraound

文章目录 **试玩效果****项目背景****核心设计思路****代码亮点解析****与强化学习算法的对接示例****扩展方向****总结****完整代码**把训练一个会玩小游戏的智能体,作为学习强化学习的一个目标,真的是很有乐趣的一件事。我已经不知为此花费了多少日夜了。如今已是着魔了一般…...

chain_type=“stuff 是什么 ? 其他方式有什么?

chain_type="stuff 是什么 ? 其他方式有什么? 目录 chain_type="stuff 是什么 ? 其他方式有什么?1. `chain_type="stuff"`2. `chain_type="map_reduce"`3. `chain_type="refine"`4. `chain_type="map_rerank"`在 LangCh…...

在IDEA里面建立maven项目(便于java web使用)

具体步骤&#xff1a; 第一次有的电脑你再创建项目的时候右下角会提醒你弹窗&#xff1a;让你下载没有的东西 一定要下载&#xff01;&#xff01;可能会很慢 运行结果&#xff1a; 因为他是默认的8080端口所以在运行的时候输入的url如下图&#xff1a; 新建了一个controller代…...

MyBatis 详解

1. 什么是 MyBatis&#xff1f; MyBatis 是一款优秀的 持久层框架&#xff0c;它通过 XML 或注解配置&#xff0c;将 Java 对象&#xff08;POJO&#xff09;与数据库操作&#xff08;SQL&#xff09;进行灵活映射&#xff0c;简化了 JDBC 的复杂操作。 核心思想&#xff1a;S…...

郑州工程技术学院党委书记甘勇一行莅临埃文科技调研交流

为深化产教融合、推动人工智能领域人才培养与产业需求精准对接&#xff0c;2025年4月9日下午&#xff0c;郑州工程技术学院党委书记甘勇、河南省人工智能产业创新发展联盟执行秘书长孟松涛等一行莅临埃文科技调研交流。 一、聚焦技术前沿 共话AI产业变革 座谈会上&#xff0c;…...

AI应用开发之扣子第一课-夸夸机器人

首先&#xff0c;进入官网&#xff1a;点击跳转至扣子。 1.创建智能体 登录进网站后&#xff0c;点击左上角&#xff0b;图标&#xff0c;创建智能体&#xff0c;输入智能体名称、功能介绍 2.输入智能体提示词 在“人设与回复逻辑”输入以下内容&#xff1a; # 角色 你是一…...

Node.js 数据库 CRUD 项目示例

希望使用Nodejs操作数据库做CRUD&#xff0c;用deepseek实战搜索“使用Nodejs对数据库表做CRUD的项目例子”&#xff0c;找到了解决方案&#xff0c;如下图所示&#xff1a; 项目结构 nodejs-crud-example/ ├── config/ │ └── db.js # 数据库连接配置 ├──…...

ESP8266/32作为AVR编程器(ISP programmer)的使用介绍

ESP8266作为AVR编程器( ISP programmer)的使用介绍 &#x1f33f;ESP8266自带库例程&#xff1a;https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266AVRISP&#x1f4cd;支持ESP8266/32的ESP_AVRISP其它开源工程&#xff08;个人没有再去验证&#xff09;&…...

union all几个常见问题及其解决方案

UNION ALL 是 SQL 中用于合并两个或多个 SELECT 语句结果集的操作符。与 UNION 不同&#xff0c;UNION ALL 不会去除重复的记录&#xff0c;它简单地将一个查询的结果附加到另一个查询的结果之后。尽管 UNION ALL 相对来说更高效&#xff08;因为它不需要检查重复项&#xff09…...

21.C++11

1.列表初始化 1.1C11中的{} •C11以后想统⼀初始化⽅式&#xff0c;试图实现⼀切对象皆可⽤{}初始化&#xff0c;{}初始化也叫做列表初始化。 • 内置类型⽀持&#xff0c;⾃定义类型也⽀持&#xff0c;⾃定义类型本质是类型转换&#xff0c;中间会产⽣临时对象&#xff0c;最…...

【交叉编译】目标机编译安装对应依赖库总结

1、解压目标机交叉编译工具链 # 创建工具链存放目录&#xff08;可选&#xff09; sudo mkdir -p /opt/toolchain# 解压到目标路径&#xff08;示例路径&#xff1a;/opt/toolchain&#xff09; sudo tar -xzvf 目标主机编译工具链.tar.gz -C /opt/toolchain# 查看解压后的目录…...

Docker华为云创建私人镜像仓库

Docker华为云创建私人镜像仓库 在华为云官网的 产品 中搜索 容器镜像服务 &#xff1a; 或者在其他页面的搜索栏中搜索 容器镜像服务 &#xff1a; 进入到页面后&#xff0c;点击 创建组织 &#xff08;华为云的镜像仓库称为组织&#xff09;&#xff1a; 设置组织名字后&…...

【15】数据结构之基于树的查找算法篇章

目录标题 二叉排序树 Binary Sort Tree二叉排序树的插入二叉树排序树的删除二叉排序树的查找二叉排序树的调试与代码集合 平衡二叉树-AV树平衡二叉树的平衡化旋转平衡二叉树的代码调试与代码集合 B树&#xff22;树的查找B树的插入B树和B*树 二叉排序树 Binary Sort Tree 二叉…...

自定义类型之结构体

1.结构体类型概述 结构体类型是一种用户自定义的数据类型&#xff0c;用于将不同类型的数据组合成一个整体。在C语言中&#xff0c;结构体使用struct关键字定义&#xff0c;由一系列具有相同类型或不同类型的数据构成的数据集合&#xff0c;也称为结构。结构体中的数据在逻辑上…...

SGFormer:卫星-地面融合 3D 语义场景补全

论文介绍 题目&#xff1a;SGFormer: Satellite-Ground Fusion for 3D Semantic Scene Completion 会议&#xff1a;IEEE / CVF Computer Vision and Pattern Recognition Conference 论文&#xff1a;https://www.arxiv.org/abs/2503.16825 代码&#xff1a;https://githu…...

应急响应篇钓鱼攻击邮件与文件EML还原蠕虫分析线索定性处置封锁

钓鱼邮件的eml中会有 邮件服务器地址域名&#xff08;发信人&#xff09;发送的本地IP和主机名发送的内容以及附件 邮件钓鱼&#xff1a; 攻击者目的&#xff1a;通过发信人&#xff0c;附件&#xff0c;取得突破 定性钓鱼邮件 威胁情报&#xff0c;人工分析来源&#xff0c…...

利用纯JS开发浏览器小窗口移动广告小功能

效果展示 直接上代码 如果要用到vue项目里面&#xff0c;直接按照vue的写法改动就行&#xff0c;一般没有多大的问题&#xff0c;顶部的占位是我项目需求&#xff0c;你可以按照要求改动。 <!DOCTYPE html> <html> <head><meta charset"utf-8"…...

java Stream流

Stream流 双列集合无法直接使用stream流&#xff0c;可以通过keyset&#xff08;&#xff09;或enteyset转换为单列集合&#xff0c;再进行操作 1.单列集合 package mystream;import java.util.ArrayList; import java.util.Collections;public class StreamDemo1 {public sta…...

【实战中提升自己】 防火墙篇之VPX部署–L2TP over IPSEC

1 VPx部署【L2TP Over ipsec】 说明&#xff1a;在VPX上面&#xff0c;我们希望与分部建立VPX&#xff0c;保证与分部的财务部正常通信&#xff0c;另外还提供L2TP Over ISPEC功能&#xff0c;方便远程接入访问内部服务器等。当然我们也可以做详细的控制&#xff…...

贪心算法(20)(java)整数替换

给定一个正整数 n &#xff0c;你可以做如下操作&#xff1a; 如果 n 是偶数&#xff0c;则用 n / 2替换 n 。如果 n 是奇数&#xff0c;则可以用 n 1或n - 1替换 n 。 返回 n 变为 1 所需的 最小替换次数 。 示例 1&#xff1a; 输入&#xff1a;n 8 输出&#xff1a;3 解…...

实验二.单按键控制LED

1.实验任务 如图4.1所示:在P0.0端口上接一个发光二极管L1,按键按一下灯亮,在按一下灯灭。 2.电路原理图 3.系统板上硬件连线 把“单片机系统”区域中的P0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容...

Ubuntu 常用命令行指令

1. 文件与目录操作 命令作用示例ls列出目录内容ls -l&#xff08;详细列表&#xff09;cd切换目录cd ~/Documentspwd显示当前目录路径pwdmkdir创建目录mkdir new_folderrm删除文件rm file.txtrm -r递归删除目录rm -r old_dircp复制文件cp file.txt backup/mv移动/重命名文件mv…...

Cribl 数据脱敏 -02 (附 测试数据)

先把实验的测试方向如下: Match Regex Replace Expression Example result <...

【项目管理】第16章 项目采购管理-- 知识点整理

项目管理-相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 &#xff08;一&#xff09;知识总览 项目管理知识域 知识点&#xff1a; &#xff08;项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域&#xff09; 对应&…...

根据关键字搜索日志内容,常用的Linux命令

在 Linux 中&#xff0c;根据关键字搜索日志内容是运维和开发的常见需求。以下是常用的命令及场景示例&#xff1a; 1. grep 基础搜索 (1) 简单关键字匹配 # 在文件中搜索包含 "error" 的行 grep "error" /var/log/nginx/error.log# 忽略大小写&#xff…...

数据结构(六)——红黑树及模拟实现

目录 前言 红黑树的概念及性质 红黑树的效率 红黑树的结构 红黑树的插入 变色不旋转 单旋变色 双旋变色 插入代码如下所示&#xff1a; 红黑树的查找 红黑树的验证 红黑树代码如下所示&#xff1a; 小结 前言 在前面的文章我们介绍了AVL这一棵完全二叉搜索树&…...

【Linux】基础 IO(文件描述符、重定向、缓冲区)

Linux 1.理解文件2.C文件接口1.打开 写文件2.读文件 简单实现cat命令3.输出信息到显示器的方式4.stdin、stdout、stderr5.打开文件的方式 3.系统接口 IO1.传递标志位2.open、close3.write、read 4.文件描述符1.是什么&#xff1f;2.分配规则3.重定向原理4.通过dup2系统调用重…...

记录一下远程调试 备忘

‌在进行远程调试时&#xff0c;目标主机不需要安装完整的编程环境‌(舍去重复安装)。可以使用Visual Studio的远程调试功能&#xff0c;或者使用gdb和gdbserver进行远程调试。 Visual Studio远程调试 ‌复制远程调试器文件夹‌&#xff1a;将Visual Studio安装目录下的remot…...

libevent服务器附带qt界面开发(附带源码)

本章是入门章节&#xff0c;讲解如何实现一个附带界面的服务器&#xff0c;后续会完善与优化 使用qt编译libevent源码演示视频qt的一些知识 1.主要功能有登录界面 2.基于libevent实现的服务器的业务功能 使用qt编译libevent 下载这个&#xff0c;其他版本也可以 主要是github上…...

MyISAM索引方案

在InnoDB中索引即数据&#xff0c;也就是聚簇索引的B树叶子节点已经包含了所有完整的用户记录&#xff0c;MyISAM的索引方案虽然也是树形结构&#xff0c;但是将索引和数据分开存储 将表中的记录按记录的插入顺序单独存储在一个文件中【数据文件】&#xff0c;这个文件不划分数…...

Windows 图形显示驱动开发-WDDM 1.2功能—WDDM 1.2 中的 Direct3D 功能和要求

一、架构演进与驱动模型 1.1 WDDM驱动模型的革命性升级 Windows 8引入的WDDM 1.2驱动模型在以下方面实现突破&#xff1a; 内存管理&#xff1a;采用统一虚拟地址空间&#xff08;UVA&#xff09;架构&#xff0c;使CPU和GPU可共享相同的指针地址空间。具体实现通过DXGK_DRI…...

深度解析 Vue 项目 Webpack 分包与合包 一文读懂

深度解析 Vue 项目 Webpack 分包与合包 一文读懂 文章目录 深度解析 Vue 项目 Webpack 分包与合包 一文读懂一、Webpack 打包机制深度解析1.1 模块化系统的本质1.2 Webpack 构建流程解析1.3 默认打包的问题分析 二、分包策略深度配置2.1 SplitChunksPlugin 核心配置2.2 精细化分…...

【ROS】map_server 地图的保存和加载

【ROS】map_server 地图的保存和加载 前言地图的保存地图的加载 前言 在 ROS 中&#xff0c;想要实现导航功能&#xff0c;首先需要一张已建好的地图。导航系统依赖这张地图进行路径规划、定位和障碍物避让等操作。本文将讲解在使用 gmapping 或 hector_mapping 建图后&#x…...

【计网】SSL/TLS核心原理

序言 在HTTP协议中&#xff0c;信息是明文传输的&#xff0c;因此为了通信安全就有了HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)协议。HTTPS也是一种超文本传送协议&#xff0c;在HTTP的基础上加入了SSL/TLS协议&#xff0c;SSL/TLS依靠证书来验证服务端的…...

sqli-labs靶场 less 11

文章目录 sqli-labs靶场less 11 POS联合注入 sqli-labs靶场 每道题都从以下模板讲解&#xff0c;并且每个步骤都有图片&#xff0c;清晰明了&#xff0c;便于复盘。 sql注入的基本步骤 注入点注入类型 字符型&#xff1a;判断闭合方式 &#xff08;‘、"、’、“”&…...

陕化之光(原创)

当城市在和周公化合 陕化的工装已与朝霞发生反应 工人先锋号已然吹响 陕化工人游走在工作的床层 钢铁森林间穿梭的身影 是沉默的催化剂 让冰冷的方程式 绽放出最活跃的分子温度 扳手与阀门对话时 塔林正在记录 关于电流与压力的学习笔记 每一次精确的调控 都是舞台上…...