正点原子lwIP学习笔记——WebServer实验

news2024/11/25 7:45:33

1. WebServer简介

Web Server就是提供Web服务的Server,主要功能是:存储、处理和传递网页给客户端,他只需支持HTTP协议、HTML文档格式以及URL,与客户端的网络浏览器配套。
其中,HTTP的协议就是基于TCP进一步实现的,所以跟之前学习的TCP协议是有一定相似之处的,例如发送请求和接收应答信号等。

Web服务器工作原理

工作原理示意图
这里都是通过HTTP协议,也就是在数据前面添加HTTP头部,服务器和客户端根据头部信息进行数据解析然后处理;这里的数据就都是html信息,而本次实验中的服务器就是我们的stm32开发板,这个html的网页信息都是预先存到MCU的FLASH之中的,通过服务器接收请求并根据HTTP协议的报文解析得到需要访问的网页,然后打开预存的文件,读取文件内容再次根据HTTP协议添加应答头部并发送回浏览器中,完成网页访问请求。

CGI技术简介

通用网关接口(Common Gateway Interface),这是一个Web服务器主机提供信息的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后把结果返回给客户端

CGI原理
在通过HTTP协议接收到请求之后,就会通过CGI接口,获取客户端提交的信息,转交给CGI程序进行处理,产生数据后再次由CGI返回,添加应答头部信号传给客户端。
例如通过浏览器控制开发板的LED和蜂鸣器就是使用CGI技术来达成的。

SSI技术简介

Server Side Include,是一种类似于ASP的基于服务器的网页制作技术;大多是WEB服务器均支持SSI命令。将内容发送到浏览器之前,可以使用“服务器端包含(SSI)”指令将文本、图形或应用程序信息包含到网页之中

SSI用在.shtml,.stm,.shtm文件中,以<!–#XXX–>的形式写在网页文件中,在服务器端接收到浏览器请求后,就会将网页文件中查找到的<!–#XXX–>替换成服务器中的Tag对应内容,然后连同网页数据一起发送给浏览器

SSI用来从服务器获取数据!

SSI原理
SSI可以将数据发送到浏览器中进行显示,通过其格式显示开发板中采集的数据,并实时显示到网页中。与CGI相比,CGI只能控制开发板的一些外设进行工作,而数据的显示(也就是tag进行替换)还是要借助SSI。

2. WebServer实验

  1. 添加httpd协议:在工程下添加httpd.c文件;
  2. 使能CGI、SSI:配置SSI处理程序,配置CGI处理程序;
  3. 添加文件路径:添加…\Middlewares\lwip\src\include\lwip\apps路径;
  4. 网页数组制作:使用makefsdata工具制作网页。

添加httpd协议方法
使能CGI、SSI
上述最后一个宏,置0就是从fsdata.c中来获取网页信息;
添加文件路径

网页数组制作

初始化函数
httpd_init函数,就是先定义altcp_pcb结构体pcb,就是tcp的控制块,然后通过altcp_tcp_new_ip_type初始化pcb一个默认的IP地址,然后调用httpd_init_pcb进行初始化;这个函数通过altcp_bind,也就是tcp_bind把本地IP和端口号绑定到控制块上,然后调用altcp_listen,也就是tcp_listen开启监听,把开发板作为服务器,如果成功开启监听就调用altcp_accept,就是tcp_accept把控制块状态改为成功连接。

也就是说,httpd_init函数,实际上就是实现TCP的连接,把开发板作为服务器去监听浏览器,也就是客户端的传输情况。

httpd_ssi_init函数,在里面调用http_set_ssi_handler配置SSI句柄,把标签和数量都传入SSIHandler,这个标签,就是ppcTAGs,自定义了一个结构体,然后命名就是按照shtml中可被代替的标签变量一一对应来实现覆盖;而SSIHandler,就是一个处理函数,通过进入switch case之后,判断进入相应的任务的句柄并处理

http_set_ssi_handler就是把SSIHandler传入的操作函数,其调用了一个函数指针来指向ssi_handler,然后会不断遍历标签,并通过传入的标签值进行替换

httpd_cgi_init也类似,通过http_set_cgi_handlers传入ppcURLs和其数量完成操作;ppcURLs就是一个二维数组,把要对硬件做的操作对应上了例如“/leds.cgi”标签;LED和BEEP的操作,都是通过传入的pcParam进行比对,通过strcmp比对标签和标签的值,如果返回**==0为true那么就进行相应操作**。

总结

本讲主要讲述了怎么把CGI和SSI进行移植,然后通过开发板作为Web Server,PC上的浏览器作为客户端进行命令发布,然后开发板进行相应;CGI就是可以操作开发板上的BSP,而SSI则可以实时去更新浏览器上的标签(学过前端,比如qt能好理解一点),然后完成图像的更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1049722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零代码编程:用ChatGPT批量修改文件夹名称中的大小写

一个文件夹下面有很多个子文件夹&#xff0c;要把文件夹中的大写数字全部重命名为小写数字&#xff0c;比如将二 三 四&#xff0c;改成&#xff1a; 2 34 在ChatGPT中输入提示词如下&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个文件夹重命名的任务。具体步骤如…

芯片测试方案之如何测试芯片EN输入阈值?

在电源管理芯片的设计中&#xff0c;除了常规的VIN、VOUT以及GND端口之外&#xff0c;还会有SW、EN、FB等芯片独有的特殊端口引脚&#xff0c;这些引脚或负责电源开关的输入&#xff0c;或负责电路的反馈电压/电流&#xff0c;这些引脚在芯片的工作中有着极其重要的作用&#x…

CUDA学习笔记0929

一、GPU缓存和变量作用域 1. 缓存类型 &#xff08;1&#xff09;GPU缓存是非可编程存储区域 &#xff08;2&#xff09;GPU包含4类缓存&#xff1a; L1缓存&#xff0c;每个流处理器一个 L2缓存&#xff0c;全部流处理器共享一个 L1和L2都可用于存储本地和全局内存中的数…

了解vtk显示的原理

文章目录 目标:知识补充:1.什么是图元?2.最让我不解的是:官方讲的是:mapper讲polydata转换为可渲染的图元数据,然后actor是将polydata映射为可渲染的图元???既然mapper就已经将其解析为图元数据,为什么actor还要进一步解析呢?3.那polydata不是也获得了一些数据,这些数据是…

快速将iPhone大量照片快速传输到电脑的办法!

很多使用iPhone 的朋友要将照片传到电脑时&#xff0c;第一时间都只想到用iTunes 或iCloud&#xff0c;但这2个工具真的都非常难用&#xff0c;今天小编分享牛学长苹果数据管理工具的照片传输功能&#xff0c;他可以快速的将iPhone照片传输到电脑上&#xff0c;并且支持最新的i…

C语言中自定义类型讲解

前言&#xff1a;C语言中拥有三种自定义类型&#xff0c;这三种自定义类型是怎么运用呢&#xff1f;在内存中又是怎么存储的呢&#xff1f;通过这篇文章我们来逐个讲解讲解。 三种类型分别是&#xff1a; 1.结构体 – 通俗的来讲就是可以把不同类型的变量放在一个集合中 2.枚举…

计算机图像处理-直方图均衡化

直方图均衡化 直方图均衡化是图像灰度变换中有一个非常有用的方法。图像的直方图是对图像对比度效果上的一种处理&#xff0c;旨在使得图像整体效果均匀&#xff0c;黑与白之间的各个像素级之间的点分布更均匀一点。通过这种方法&#xff0c;亮度可以更好地在直方图上分布。 …

将外包jar包导入到本地Maven仓库中

文章目录 1.问题描述2.方法如下 1.问题描述 有时候我们需要引入阿里云或者mvnRespository网上没有对于的jar。需要下载别人的jar的包&#xff0c;然后放到自己的项目的libs目录下。这样很不方便。因此需要把外包的jar,导入到本地maven仓库中。这样再pom.xml文件中直接按三要素…

项目进展(四)-双电机均可驱动,配置模拟SPI,调平仪功能初步实现!

一、前言 截止到今天&#xff0c;该项目也算实现基本功能了&#xff0c;后续继续更新有关32位ADC芯片相关的内容&#xff0c;今天对驱动芯片做一个总结&#xff0c;也对模拟SPI做一点总结吧 二、模拟SPI 由于模拟SPI还是得有四种模式(CPOL和CPHA组合为四种)&#xff0c;下面…

虚拟DOM详解

面试题&#xff1a;请你阐述一下对vue虚拟dom的理解 什么是虚拟dom&#xff1f; 虚拟dom本质上就是一个普通的JS对象&#xff0c;用于描述视图的界面结构 在vue中&#xff0c;每个组件都有一个render函数&#xff0c;每个render函数都会返回一个虚拟dom树&#xff0c;这也就意味…

基于视频技术与AI检测算法的体育场馆远程视频智能化监控方案

一、方案背景 近年来&#xff0c;随着居民体育运动意识的增强&#xff0c;体育场馆成为居民体育锻炼的重要场所。但使用场馆内的器材时&#xff0c;可能发生受伤意外&#xff0c;甚至牵扯责任赔偿纠纷问题。同时&#xff0c;物品丢失、人力巡逻成本问题突出&#xff0c;体育场…

系统集成|第十九章(笔记)

目录 第十九章 风险管理19.1 风险管理的概述及相关概念19.2 主要过程19.2.1 规划风险管理19.2.2 识别风险19.2.3 实施定性风险分析19.2.4 实施定量风险分析19.2.5 规划风险应对19.2.6 控制风险 上篇&#xff1a;第十八章、安全管理 下篇&#xff1a;第二十章、收尾管理 第十九…

什么是密码管理,密码管理的重要性

密码管理是通过遵守一套可持续的做法&#xff0c;在从创建到关闭的整个生命周期中保护和管理密码的过程。这是在存储特权的密码管理器的帮助下实现的 使用内置加密保管库的凭据。 随着 IT 环境的扩展&#xff0c;密码激增&#xff0c;并且随着需要保护的密码越来越多&#xff…

SpringMVC 学习(八)整合SSM

10. 整合 SSM (1) 新建数据库 CREATE DATABASE SSM;USE SSM;DROP TABLE IF EXISTS BOOKS;CREATE TABLE BOOKS (BOOK_ID INT(10) NOT NULL AUTO_INCREMENT COMMENT 书ID,BOOK_NAME VARCHAR(100) NOT NULL COMMENT 书名,BOOK_COUNTS INT(11) NOT NULL COMMENT 数量,DETAIL VARCH…

《计算机视觉中的多视图几何》笔记(12)

12 Structure Computation 本章讲述如何在已知基本矩阵 F F F和两幅图像中若干对对应点 x ↔ x ′ x \leftrightarrow x x↔x′的情况下计算三维空间点 X X X的位置。 文章目录 12 Structure Computation12.1 Problem statement12.2 Linear triangulation methods12.3 Geomet…

NLP的不同研究领域和最新发展的概述

一、介绍 作为理解、生成和处理自然语言文本的有效方法&#xff0c;自然语言处理 &#xff08;NLP&#xff09; 的研究近年来迅速普及并被广泛采用。鉴于NLP的快速发展&#xff0c;获得该领域的概述和维护它是困难的。这篇博文旨在提供NLP不同研究领域的结构化概述&#xff0c;…

淘宝商品详情接口数据采集用于上货,无货源选品上货,采集淘宝天猫商品详情数据

淘宝商品详情接口数据采集可用于上货。先通过关键字搜索接口&#xff0c;抓取到批量的商品ID&#xff0c;再将商品ID传入商品详情数据采集接口的请求参数中&#xff0c;从而达到批量抓取商品详情数据的功能。 接口名称&#xff1a;item_get&#xff0c;获取商品详情数据&#…

读高性能MySQL(第4版)笔记17_复制(下)

1. 复制切换 1.1. 复制是高可用性的基础 1.1.1. 总是保留一份持续更新的副本数据&#xff0c;会让灾难恢复更简单 1.2. “切换副本”&#xff08;promoting a replica&#xff09;和“故障切换”&#xff08;failing over&#xff09;是同义词 1.2.1. 意味着源服务器不再接…

JDBC【DBUtils】

一、 DBUtils工具类&#x1f353; (一)、DBUtils简介&#x1f95d; 使用JDBC我们发现冗余的代码太多了,为了简化开发 我们选择使用 DbUtils Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库&#xff0c;使用它能够简化JDBC应用程序的开发&#xff0c…

Ubuntu 20.04二进制部署Nightingale v6.1.0和Prometheus

sudo lsb_release -r可以看到操作系统版本是20.04&#xff0c;sudo uname -r可以看到内核版本是5.5.19。 sudo apt-get update进行更新镜像源。 完成之后&#xff0c;如下图&#xff1a; sudo apt-get upgrade -y更新软件。 选择NO&#xff0c;按下Enter。 完成如下&…