c++应用网络编程之一基本介绍
一、网络编程介绍
c++编程的应用场景在前面分析过,一个重要的方向就是网络编程。一般来说,开发者说的服务端编程在c++方向上简单的可以认为是网络编程。首先需要说明的,本系列不对网络编程的相关基础知识展开详细的说明,因为这种知识在书本上太多了。网络上各种资料更是满开飞,没有必要拷贝来拷贝去的。特别是一些协议等的解析说明,如果不遇到特定的问题不会深入分析说明。
那么最应该明白的网络编程是什么?那么就得明白网络是如何而来。网络,从名字上很好理解,一张把“经络”连接起来的大网。不过这个经络不是人体中的“经络”而是一个个节点,这个节点可以是虚拟的,也可以是物理的,也可以是混合的。它可以是一台电脑,一个手机,一个终端,也可以是一个局域网、城域网等等。
计算机的网络技术在计算机技术中算是比较早期的一种技术了,在60年代的中期就已经开始在实际应用了。但真正的普及是美国的国防用网络。早期学习电脑的或者看过早期电影的,都听说过某某黑客特别厉害,进入了五角大楼的网络,盗取了不少军事资料。可以这样讲,计算机的网络技术也是从美国开始兴起的,然后在全世界开始普及。这也解释了为什么现在最牛的互联网公司基本都在美国的一个重要原因。比如耳熟能详的谷歌、微软、脸书以及推特等等。
随着PC的出现和发展,局域网(LAN)出现。美国Xerox公司首先推出了Ethernet网,慢慢其成为了一种标准,大家都称现在的局域网络为以太网。有了局域就会有广域网WAN。不过需要说明的是,所谓局域与广域是一个相对概念,请大家一定要根据实际场景来确定。
网络技术其实就是处理PC间连接通信的技术。从物理上讲,如何识别网络中的PC,如何与其它PC交换数据等等。首先需要用物理导线将各个PC连接起来,一开始是电缆,后来光缆,再后来又有无线技术。然后还要有路由器和交换机把数据将有的传送到指定的PC。而为了实现上述的功能,就需要一系列的通信标准和通信协议。这就引出了网络协议的五层模型(七层就是个学术的东西,没啥实际应用的意义)。而这个模型中,则包含是最常见的网络编程中的TCP/IP、UDP、HTTP等最常见的网络编程技术。或者说的不准确一些,对大多数的网络编程人员来说,就是TCP/IP和UDP编程。在移动互联网中,HTTP则更为普及的被使用。至于其它的技术,基本都是相当专业的人员或者特定领域的开发者才会使用。
二、基本知识
这里不谈较老的技术和很新的技术,比如QUIC和HTTP3等。在网络编程中,可以分成两大类应用,即B/S开发和C/S开发(P2P以后专门讲),这里只谈C/S开发。即本系列主要针对C/S开发中的TCP/IP编程以及UDP的编程。只要掌握了它们的编程,其它的编程基本都差不多。在TCP/IP和UDP编程中,需要掌握一些基本的知识:
1、服务器
这个概念是一个非常容易混淆的概念,一定要区别在不同的语境和环境下的定义。在网络编程的语境下,一般是指承载网络服务软件的服务器电脑(硬件)。它可以分成网络内部自用,比如路由器、交换机等也可以只提供某种网络服务的电脑如打印服务器、邮箱服务器等。
2、服务端
服务端或服务端软件,也可以叫网络服务,在特定到C/S编程中,就是指提供连接服务的程序。一般来说,服务端是被接收连接的。
3、客户端
客户端在C/S编程中指发起连接的一端。
4、协议栈
协议栈(Protocol stack),又称协议堆叠,是计算机网络协议套件的一个具体的软件实现。
5、伯克利套接字
伯克利套接字(Berkeley sockets),也称为BSD Socket。其是一种使用C语言实现的网络编程抽象接口。现在几乎成为了互联网通信的标准接口。
6、五元组和三元组:
五元组包括:源IP地址,源端口,目的IP地址,目的端口和传输层协议。这等同于现实世界中的人和人之间的通信地址。
7、协议族
socket函数中的第一个参数中意义,也叫协议域。通常有AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域socket)、AF_ROUTE等。协议族确定socket的地址类型,即双方必须使用相同的通信类型才可以进行以通信。如常见的AF_INET需要用32位(类似192.168.0.1)ipv4地址与16位端口号(最大65535)的组合、AF_UNIX需要用一个绝对路径名作为地址。
当然,还有很多的基础性的知识和名词术语。网络技术是一个发展了很多年的技术,它既成熟又年轻。举一个简单的例子,当有一个人说他是搞服务端编程的,如何确定他的技术栈?其实这个定义非常难确定,网上一些大牛的说明其实也不能够完全覆盖相关的内容,即他们的定义也是不严谨的。但仅从经验和学识来推断,特定到C/c++中,它一般是指TCP/IP编程的相关技术栈(当然,它也不严谨)。
再举一个实际的例子,大家去品一下上面这段话,至于能理解多少看自身了。在某电力部门,要求把服务端程序部署在终端上,把客户端程序部署在服务器上。客户端要24*7运行,服务端可以允许断线。
注意:再次说明,本系列不是对网络编程技术基础知识的详细分析说明,是对c++在网络编程上的应用分析说明,所以只对相关的一些知识点进行指出和简要的说明。更多的相关知识,请自行查阅下面提供的书籍和资料!
三、简单示例
虽然网络编程的例子多之又多,但这里还是要给一个简单的例子:
服务端:
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>int main() {int server_fd, new_socket;struct sockaddr_in address;int opt = 1;int addrlen = sizeof(address);char buffer[1024] = {0};const char* msg = "hello moto!";//创建socketif ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("socket failed");exit(EXIT_FAILURE);}//设置选项if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {perror("setsockopt");exit(EXIT_FAILURE);}//地址设置address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons( 8888 );//绑定端口if (bind(server_fd, (struct sockaddr *)&address, sizeof(address))<0) {perror("bind err");exit(EXIT_FAILURE);}//监听if (listen(server_fd, 5) < 0) {perror("listen");exit(EXIT_FAILURE);}//接受连接if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen))<0) {perror("accept err!");exit(EXIT_FAILURE);}send(new_socket , msg , strlen(msg) , 0 );printf("send msg ...\n");memset(buffer, '\0' , 1024);int ret = recv( new_socket , buffer, 1024,0);printf("%s\n",buffer );return 0;
}
客户端:
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>int main() {int sock = 0, ret;struct sockaddr_in serv_addr;const char* msg = "hello !";char buffer[1024] = {0};//创建socketif ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {printf("\n Socket error \n");return -1;}serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(8888);//转换地址if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0) {printf("\n Invalid address \n");return -1;}//连接serverif (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {printf("\n Connection err \n");return -1;}send(sock , msg , strlen(msg) , 0 );printf("send msg !\n");ret = recv( sock , buffer, 1024,0);printf("%s\n",buffer );return 0;
}
写这种测试的小例程有一个需要注意的地方,客户端发送完成后,不要立即退出,否则可能服务端收不到相关的消息。
四、推荐的资料和书籍
一如在VC编程上侯捷教师是一个令开发者仰望的山峰,在网络编程也有很多更高的高峰。比如常见的推荐的《TCP/IP详解》三卷和《Unix网络编程》两卷的作者W. Richard Stevens(当然他写的APUE也相当的出名)。不过这些书的缺点也有,就是太老了。导致一些技术已经落后而一些新技术没有体现出来。其它国外的还有不少就不一一列举。国内也有几个比较有名气的网络开发者,限定到本文这个场景非常推荐MUDUO库的作者陈硕。当然就像江湖中一样,肯定还有很多高手隐身不出。
学习网络编程的书籍非常多,比如CSDN的孟岩大佬的“四书五经”之说就是为多数大牛推荐的。这里简单罗列一下:
1、TCP/IP详解(三卷)(TCP/IP Illustrated)
2、Unix网络编程(两卷)(UNIX Network Programming)
3、TCP/IP高级编程(Effective TCP/IP Programming)
4、C++网络编程(两卷)(C++ Network Programming)
虽然这些书籍非常不错,但对于初学者未必就合适,也推荐一些比较容易借鉴学习的书籍:
1、《Linux多线程服务端编程》 陈硕
2、《Linux高性能服务端编程》 游双
3、《Windows网络与通信程序设计》 王艳平
并不是说其它的书籍不值得推荐,是觉得这几本书更容易被学习和接受。至于网络上的资料就更多了,如陈硕、原网易的云风等人的BLOG都非常值得一看。个人的建议是,要根据自己的实际情况来决定学习成长的路线,不要人云亦云。大牛们给的建议可能对大多数人都是非常好的,但具体到某些个体,可能会有所不妥。大家要知道如何不断的根据大牛们的建议因地制宜的学习。
另外在网上还存在着大量的网络框架如C++网络编程中的ACE,还有libevent,libuv,libev,libeio,libhv,asio,poco等等。毕竟网络应用是一个非常高频的应用,也是很多开发者想登顶的希望。
其实还有很多应用程序中也有非常好的例子,比如REDIS,有时间推荐看看内部如何跨平台实现了网络服务端的编程。
五、总结
网络编程是一个复杂的应用,一般来说,很难在一两年内达到熟练掌握的程度,更不要谈精通了。通常,把基础的网络知识学习完成,头脑中有一个相对完整的网络编程概念,然后在实际应用中不断的加以印证,才能更快更好的掌握网络编程。
网络编程其实是一个简单应用易,复杂应用极难的技术。它不仅是涉及到网络相关的技术,还包括内存管理、多线(进)程以及异步编程等很多技术,甚至是否需要跨平台跨系统等。对大多数开发者言,网络编程的应用一般都是比较简单的应用,并发通常也就是十个量级左右,而且经常类似于交互式通信那种情况。对多线程和异步的要求不高甚至没有,对内存管理和效率的要求也不严格。
但当真正到了C10K以上的编程时,复杂程度立刻便上来,导致很多开发者没有一个过渡便直面这些复杂的应用。也就是说,在网络编程大多数的编程场景是要么简单,要么复杂,中等的开发场景非常少。而且从设计上考虑,一旦到了中等的场景,优秀的架构师通常会考虑扩展的情况下设计成更为复杂的框架结构。
复杂的网络编程,导致很多的框架的出现,而这些框架的出现更是切断了大多数开发者对背后复杂结构的理解,导致一个从初级网络编程到高级网络编程的连续而完整的流程,即要么只会简单的编程,要么只会在框架下完成各种场景的应用。
更何况,网络编程的实际要求仍然在不断的增长,这也是前面分析DPDK和XDP等的一些重要原因。换句话说,网络编程的技术仍然在不断的进步。所以,不断的学习才能保证在网络编程的方向上有更大的发展。
相关文章:
c++应用网络编程之一基本介绍
一、网络编程介绍 c编程的应用场景在前面分析过,一个重要的方向就是网络编程。一般来说,开发者说的服务端编程在c方向上简单的可以认为是网络编程。首先需要说明的,本系列不对网络编程的相关基础知识展开详细的说明,因为这种知识…...
Web后端开发概述环境搭建项目创建servlet生命周期
Web开发概述 web开发指的就是网页向后再让发送请求,与后端程序进行交互 web后端(javaEE)程序需要运行在服务器中 这样前端才可以对其进行进行访问 什么是服务器? 解释1: 服务器就是一款软件,可以向其发送请求,服务器会做出一个响应.可以在服务器中部署文件,让…...
Java 位运算详解
位运算是一种直接在二进制位上进行操作的方式。位运算符包括按位与 (&)、按位或 (|)、按位异或 (^)、按位非 (~)、左移 (<<)、右移 (>>) 和无符号右移 (>>>)。这些操作符用于操作整型数据类型,如 int 和 long。 一、按位与 (&) 按位…...
智能体实战:开发一个集成国内AI平台的GPTs,自媒体高效智能助手
文章目录 一,什么是GPTs二,开发GPTs1,目标2,开发2.1 打开 GPTS:https://chat.openai.com/gpts2.2 点击 Create 创建一个自己的智能体 2.3 配置GPTs2.4 配置外挂工具2.4.1 配置Authentication-授权2.4.1.1 生成语聚AI的…...
完美世界|单机版合集(共22个版本)
前言 我是研究单机的老罗,今天给大家带来的是完美世界的单机版合集,一共22个版本。本人亲自测试了一个版本,运行视频如下: 完美世界|单机版合集 先看所有的版本的文件,文件比较大,准备好空间,差…...
Jenkins的一些记录
设置环境变量 在 Jenkins 流水线中,取决于使用的是声明式还是脚本式流水线,设置环境变量的方法不同。 声明式流水线支持 environment 指令,而脚本式流水线的使用者必须使用 withEnv 步骤。 pipeline {agent anyenvironment { CC clang}stag…...
讲讲js中的prototype和__proto__
在Javascript中,prototype和__proto__是两个重要的概念,在对象的原型链中扮演重要的角色。 prototype prototype是js函数的内置属性,每个函数都有一个prototype属性,它是一个指针,指向一个对象(原型对象&a…...
JavaScript的学习之DOM的查询(一)
一、获得元素 通过document对象调用: getElementById():通过id属性获取一个元素节点对象getElementsByTagName():通过标签名获取一组元素节点对象getElementsByName():通过name属性来获取一组元素节点对象 核心学习代码 <scrip…...
充电宝哪个品牌比较好一点?多维度实测西圣、绿联、倍思充电宝!
在这个快节奏的时代,智能手机已成为我们日常生活不可或缺的一部分,而充电宝作为其能量补给站,重要性不言而喻。面对市场上琳琅满目的充电宝品牌与型号,如何挑选一款既实用又高效的充电伴侣,成为了许多消费者的难题。今…...
ubuntu安装QT
以QT5.15.14为例 下载地址:Index of /archive/qt 安装步骤: 解压qt-everywhere-src-5.15.14运行: cd qt-everywhere-src-5.15.14 mkdir build cd build ../configure -prefix /opt/qt5.15.14 -opensource -confirm-license make -j16 sudo…...
DataGrip 2024 po for Mac 数据库管理工具解
Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件(适合自己的M芯片版或Intel芯片版),将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功3、打开访达,点击【文…...
《C++ Primer》导学系列:第 13 章 - 拷贝控制
13.1 拷贝、赋值与析构函数 拷贝控制是C++中类设计的重要组成部分,用于管理对象的复制、赋值和销毁过程。理解并正确实现拷贝控制函数(拷贝构造函数、拷贝赋值运算符和析构函数)对于编写健壮和高效的C++程序至关重要。 13.1.1 拷贝构造函数 拷贝构造函数用于创建对象的副…...
c++ 图论2 深度优先算法和广度优先算法
修改一下深度优先算法和广度优先算法,标出每一个节点相对于遍历起始位置的层级,遍历起始起点为第一层,和第一层相连的节点为第二层,以此类推 定义一个新的结构 struct NodeWithLevel {TreeNode* node;int level;NodeWithLevel(T…...
【Qt】初识QtQt Creator
一.简述Qt 1.什么是Qt Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。它为应⽤程序开发者提供了建⽴艺术级图形界⾯所需的所有功能。它是完全⾯向对象的,很容易扩展。Qt 为开发者提供了⼀种基于组件的开发模式,开发者可以通过简单的拖拽和组合来实现…...
Android 11.0 修改系统显示大小导航栏消失
Android 11.0 修改系统显示大小导航栏消失 1.显示大小设置为大时,导航栏图标不显示。 设置为大,较大,最大时,导航栏图标不显示。 2.开始怀疑是导航栏被隐藏了,各种折腾无效。 3.发现: frameworks/base/pa…...
RocketMQ源码学习笔记:Producer启动流程
这是本人学习的总结,主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview1.1、创建MQClientInstance1.1.1、检查1.1.1、MQClientInstance的ID 1.2、MQClientInstance.start() 1、Overview 这是发送信息的代码样例, DefaultMQProducer produ…...
Node.js 和浏览器环境中都使用 WebSocket
使用WebSocket为什么不适配双端 浏览器环境本身就支持 WebSocket,直接使用 JavaScript 内置的 WebSocket 对象来建立连接。 Node中本身并没有内置 WebSocket 协议的支持,所以需要使用第三方库 ws来实现 WebSocket 功能。 一. 使用跨平台 WebSocket 库 …...
css美化滚动条样式
效果展示 实现 滚动条宽,高度 /* 整体滚动条 */ ::-webkit-scrollbar {width: 10px; }/* 滚动条轨道 */ ::-webkit-scrollbar-track {background-color: #ffffff;border-radius: 6px; }/* 滚动条滑块 */ ::-webkit-scrollbar-thumb {background-color: #888;borde…...
由浅入深,走进深度学习(补充篇:转置卷积和FCN)
本期内容是针对神经网络层结构的一个补充,主要内容是:转置卷积和全连接卷积网络 相关内容: 由浅入深,走进深度学习(2)_卷积层-CSDN博客 由浅入深,走进深度学习(补充篇:…...
Linux基础篇——目录结构
基本介绍 Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在根目录下再创建其他的目录 在Linux中,有一句经典的话:在Linux世界里,一切皆文件 Linux中根目录下的目录 具体的…...
星际编码:Swifter.Json,.NET宇宙中的数据处理新星
概述 在数字化的星辰大海中,数据是宇宙的通用语言。在.NET这一广袤的星系中,JSON作为信息交换的媒介,扮演着至关重要的角色。今天,我们要探索的是一颗新星——Swifter.Json,一个功能全面且性能卓越的JSON序列化和反序列…...
python 压缩数据
requests 是 Python 中一个非常流行的 HTTP 库,用于发送各种 HTTP 请求。下面是一个使用 requests 库发送简单 GET 请求和 POST 请求的示例: 首先,确保你已经安装了 requests 库。如果还没有安装,可以使用 pip 进行安装ÿ…...
nacos在k8s上的集群安装实践
目录 概述实践nfs安装使用 k8s持久化nacos安装创建角色部署数据库执行数据库初始化语句部署nacos ingress效果展示问题修复 结束 概述 本文主要对 nacos 在k8s上的集群安装 进行说明与实践。主要版本信息,k8s: 1.27.x,nacos: 2.0.3。运行环境为 centos 7…...
数据结构—判断题
1.数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的存储结构。 答案:错误 2.(neuDS)在顺序表中逻辑上相邻的元素,其对应的物理位置也是相邻的。 答案:正确 3.若一个栈的输入序列为{1, 2, 3, 4, 5},则不…...
树莓派挂载的移动硬盘badblocks坏道屏蔽,以这个为准
!!!use 这里要设置块大小和磁盘相同 badblocks -b 4096 -s -c 512 -v -o /a/2/bads4.txt /dev/sda5 检测完重新检测跳过之前的记录 badblocks -i /a/2/bads4.txt -b 4096 -s -c 512 -v -o /a/2/bads5.txt /dev/sda5 可以查看磁盘具体block总数和大小 sudo dumpe2fs /dev/sda5 …...
Unity开箱即用的UGUI面板的拖拽移动功能
文章目录 👉一、背景👉二、效果图👉三、原理👉四、核心代码👉五,总结 👉一、背景 之前做PC项目时常常有面板拖拽移动的需求,今天总结封装一下,做成一个随时随地可复用的…...
春秋云境:CVE-2022-25411[漏洞复现]
根据题目提示和CNNVD优先寻找后台管理地址 靶机启动后,使用AWVS进行扫描查看网站结构 在这里可以看到后台管理的登录地址:/admin/,根据题目提示可知是弱口令 尝试admin、123456、admin666、admin123、admin888...等等常见弱口令 正确的账户…...
java基础知识点全集
JAVA的所有知识点 一、基础的数组、数据类型、输入输出二、类与对象1. 三大特征(1) 封装(2)继承(3)多态 2. 类的实例化(1) 类通过NEW来创建(2) 类的继承&…...
如何完成域名解析验证
一:什么是DNS解析: DNS解析是互联网上将人类可读的域名(如www.example.com)转换为计算机可识别的IP地址(如192.0.2.1)的过程,大致遵循以下步骤: 查询本地缓存:当用户尝…...
2024年6月个人工作生活总结
title: 2024年6月个人工作生活总结 urlname: code-for-2024-06 tags: 代码积累知识总结 categories:我的程序代码 date: 2024-06-30 00:00:00 photos:gallery/tech/c2.jpg 本文为 2024年6月工作生活总结。 研发编码 编码和注释 因某些需要,重拾了2019年的工程代码…...
Json与Java类
简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON数据由键值对构成,并以易于阅读的文本形式展现,支持数组、对象、字符串、数字、布尔值…...
动手学深度学习(Pytorch版)代码实践 -计算机视觉-39实战Kaggle比赛:狗的品种识别(ImageNet Dogs)
39实战Kaggle比赛:狗的品种识别(ImageNet Dogs) 比赛链接:Dog Breed Identification | Kaggle 1.导入包 import torch from torch import nn import collections import math import os import shutil import torchvision from…...
在Linux系统中挂载硬盘
目录 1. 查看硬盘信息 2. 分区硬盘(如果硬盘没有分区) 3. 格式化分区 4. 创建挂载点 5. 挂载分区 6. 验证挂载 7.设置开机自动挂载(可选) 1. 查看硬盘信息 lsblk 这个命令会列出所有的块设备,包括硬盘 2.…...
安卓短视频去水印v1.7 简洁好用
各大平台视频无水印提取,登录即永久会员! 无水印提取,图片无水印提取 视频旋转,倒放,转gif等功能。 链接:https://pan.baidu.com/s/1UgO4V16ZM34tG5uDog74Pg?pwdcn0u 提取码:cn0u...
【征服数据结构】:期末通关秘籍
【征服数据结构】:期末通关秘籍 💘 数据结构的基本概念😈 数据结构的基本概念😈 逻辑结构和存储结构的区别和联系😈 算法及其特性😈 简答题 💘 线性表(链表、单链表)&…...
GIT 基于master分支创建hotfix分支的操作
基于master分支创建hotfix分支的操作通常遵循以下步骤: 切换到master分支: 首先,确保你的工作区是最新的,并且你在master分支上。如果不在master分支,你需要先切换过去。 Bash git checkout master 拉取最新的master…...
Vue-CLI脚手架与node.js安装
前言: Vue-CLI 是一个基于 Vue.js 快速开发单页应用的官方脚手架工具,能够帮助开发者快速搭建前端项目的基础结构。在开始使用 Vue-CLI 前,首先需要安装 Node.js,因为 Vue-CLI 是基于 Node.js 构建的。 Node.js 是一个基于 Chrom…...
自适应站长跑路单页网站源码
跑路单页HTML源码自行修改文字就行了,上传到服务器里面运行即可,本地运行的话音乐会加载不出来,涉及到跨域问题 自适应站长跑路单页网站源码...
Java基础(判断和循环)
一、流程控制语句-顺序结构 顺序结构语句是Java程序默认的执行流程,按照代码的先后顺序,从上到下依次执行。 二、流程控制语句-分支结构(分支结构包括if、switch) if语句:在程序中用来进行判断 1、If语句的第一种格式…...
51单片机第12步_使用stdio.h库函数仿真串口通讯
本章介绍如何使用stdio.h库函数仿真串口通讯,学会使用view下面的“serial window #1”,实现模拟串口通讯。 Keil C51中有一些关键字,需要牢记: interrupt0:指定当前函数为外部中断0; interrupt1:指定当前函数为定时器0中断&…...
simulink-esp32开发foc电机
1. ESP32 和 STM32 都是流行的微控制器,但它们的刷写方式有所不同。 ESP32 ESP32 可以通过以下几种方式刷写: USB 下载模式:这是最常见的一种刷写方式。将 ESP32 连接到计算机的 USB 端口,然后将 ESP32 置于下载模式。可以使用…...
Python教程--基本技能
】TOC 5.1 解析命令行参数 在Python中,解析命令行参数是一项常见的任务,尤其是在开发命令行工具或脚本时。Python标准库提供了argparse模块,它可以帮助你轻松地编写用户友好的命令行接口。下面是使用argparse模块解析命令行参数的基本步骤&…...
干货分享:Spring中经常使用的工具类(提示开发效率)
环境:Spring5.3…30 1、资源工具类 ResourceUtils将资源位置解析为文件系统中的文件的实用方法。 读取classpath下文件 File file ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX "logback.xml") ; // ...读取文件系统文件 file Resou…...
一文讲懂npm link
前言 在本地开发npm模块的时候,我们可以使用npm link命令,将npm 模块链接到对应的运行项目中去,方便地对模块进行调试和测试 用法 包链接是一个两步过程: 1.为依赖项创建全局软链npm link。一个符号链接,简称软链&a…...
观成科技:证券行业加密业务安全风险监测与防御技术研究
摘要:解决证券⾏业加密流量威胁问题、加密流量中的应⽤⻛险问题,对若⼲证券⾏业的实际流量内容进⾏调研分析, 分析了证券⾏业加密流量⾯临的合规性⻛险和加密协议及证书本⾝存在的⻛险、以及可能存在的外部加密流量威 胁,并提出防…...
使用Swoole开发高性能的Web爬虫
使用swoole开发高性能的web爬虫 Web爬虫是一种自动化获取网络数据的工具,它可以在互联网上收集数据,并且可以被应用于各种不同的领域,如搜索引擎、数据分析、竞争对手分析等。随着互联网规模和数据量的快速增长,如何开发一个高性…...
【Elasticsearch】Elasticsearch索引创建与管理详解
文章目录 📑引言一、Elasticsearch 索引的基础概念二、创建索引2.1 使用默认设置创建索引2.2 自定义设置创建索引2.3 创建索引并设置映射 三、索引模板3.1 创建索引模板3.2 使用索引模板创建索引 四、管理索引4.1 查看索引4.2 更新索引设置4.3 删除索引 五、索引别名…...
[数据集][目标检测]棉花检测数据集VOC+YOLO格式389张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):389 标注数量(xml文件个数):389 标注数量(txt文件个数):389 标注类别…...
使用Java实现实时数据处理系统
使用Java实现实时数据处理系统 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 引言 在当今信息爆炸的时代,实时数据处理系统变得越来越重要。无论…...
整合web-socket的常见bug
整合文章连接 此文是记录我上网查找整合方案时候踩的坑,特别是注册失败的问题,比如还有什么去掉Compoent就可以,但是这样这个端点就失效了 特别是报错: at org.springframework.web.socket.server.standard.ServerEndpointExporter.registerEndpoint(ServerEndpointExporter.…...
2024高考作文题“人工智能”
今年开年到现在,明显的感受就是,咨询人工智能机器人的客户比往年更多了。什么原因,是因为人工成本太高了,今年整体经济环境变差,招不起人,所以想用AI机器人来降低用工成本吗? 还是说因为语音线路…...
Python requests模块
Python中的requests是第三方模块用于实现HTTP请求,该模块在实现 HTTP请求时要比Python语言内置的 urllib 模块简化很多,操作更加人性化。在 Windows系统下使用requests 模块时需要通过在命令行窗口中执行 pip install requests 代码进行安装。 import r…...
目标检测之YOLOv6实践
序: 上一篇文讲了目标检测的基础知识,今天以YoloV6 为例(选择v6,因为项目的选型),详细讲解目标检测的工程细节,一些重要的超参数,必须用到的工具,会在工程任务中解释。 …...
EBS请求通过一段SQL输出EXCEL文件
一.设计初衷 1.EBS请求输出excel文件常用的有3种模式: 1.1.RTF模板XML数据源 1.2 package输出html格式 1.3 package输出excel对应的xml文本 2.上面三种模式开发起来都比较麻烦,而且输出的是xls的文件,如果导出的数据很多,文件特别大。 3.…...
VUE3解决跨域问题
本文基于vue3 vite element-plus pnpm 报错:**** has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 原因:前端不能直接访问其他IP,需要用vite.config.ts ࿰…...
(2024)docker-compose实战 (4)部署redis
前言 本次仅搭建单一的redis服务.如果不确定镜像的配置文件目录, 可以通过 docker inspect 镜像名 来查看具体的配置信息.使用docker-compose.yaml时, 请自行去除注释. 目录结构 web/ /web/目录 | ├─ redis/ redis目录 | ├─ conf/ 配置文件目录 |…...
夜读朱大建:海菜花,清水的精灵
海菜花不光美丽,还是美味。去年6月5日世界环境日当天,我写的生态纪实文学《海菜花开》,由上海交通大学出版社召开出版座谈会,全国有十多家媒体刊发报道或书评。当月,该书就印了三次。去年9月,由上海交大创作、学生主演的校园话剧《海菜花开》在闵行校区菁菁堂演出。今年3…...
起售13.98万,取消鲢鱼嘴设计,试驾体验第十一代索纳塔!
对于2002年就进入国内市场的索纳塔,相信大多数人并不陌生,定位上是一台中型车,整体的风格就是突出运动基因,而在今年是迎来了家族第十一代车型上市。车辆指导售价在13.98~18.68万之间,作为一台中型车,定价方面还算合理,从低到高,动力上有两种选择,一种是1.5T涡轮增压引…...
CSS浮动详细教学(CSS从入门到精通学习第四天)
css第04天 一、其他样式 1、圆角边框 在 CSS3 中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。 border-radius 属性用于设置元素的外边框圆角。 语法: border-radius:length; 参数值可以为数值或百分比的形式如果是正方形&…...
【busybox记录】【shell指令】unlink
目录 内容来源: 【GUN】【unlink】指令介绍 【busybox】【unlink】指令介绍 【linux】【unlink】指令介绍 使用示例: 删除文件 - 默认 常用组合指令: 指令不常用/组合用法还需继续挖掘: 内容来源: GUN &#x…...
转行一年了
关注、星标公众号,直达精彩内容 ID:技术让梦想更伟大 整理:李肖遥 来公司一年了。 说是转行其实还是在半导体行业,熟悉我的朋友知道 ,我在18年开始进入半导体行业,那个时候想着行业很重要,站对了…...
【15年成为通用MCU第一,STM32凭什么?】
微控制器(MCU)是这个快速变化世界的重要助推器和核心组成部分,也是整个数字世界应用最普遍的数字芯片之一。通用MCU市场竞争情况复杂且多样,开发者需要选择最适合的MCU产品完成创新设计。而MCU市场竞争发展的重点一定是以开发者为…...