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

文章介绍了WebServer的基本概念,重点讲解了如何在STM32开发板上实现CGI和SSI技术,通过HTTP协议与浏览器交互,实现对硬件的控制和网页内容的动态更新。
摘要由CSDN通过智能技术生成

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能好理解一点),然后完成图像的更新。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值