2013.7.7 webserver动态相关
来源:互联网 发布:手机论坛下载软件 编辑:程序博客网 时间:2024/06/06 19:39
今天完成了利用CGI实现网页与K60为MCU的服务器间的交互
接下来讲一讲图片的动态显示。
先说说uip的webserver中数据交互的过程,如下图所示。其中UIP_APPCALL函数放在了httpd-cgi.c文件中
这里引用阿莫论坛网友的一段话【在WEBSERVER历程中,程序遇到URL中包含有".shtml",就会调用相应的CGI函数来解析相应的ssi,比如你访问files.shtml的时候,程序就会逐子解析files.shtml(以数组的形式存放在flash中)。在".shtml"里以"%!"作为ssi命令的标记,当遇到这两个字符时,后面就是ssi命令。如果没有遇到ssi命令".shtml"中的数据原样输出就可以了,如果遇到ssi命令,解析后再输出给客户端。】
实际上上面这段话说的就是当我们打开某个网页的时候【如192.168.0.201/index.shtml】,这时候服务器发现要打开【index.shtml】了,就会把httpd-fsdata.c中由index.shml生成的数组【data_index_shtml】发送出去,这个数组中前面的部分包含了uip协议下对于webserver特定的帧头。
html网页文件生成的数组本身存在单片机的存储介质(flash、EEPROM、SD卡等)中,是不能改变的,因此我们把html这样的网页叫做“静态的”,而所谓的利用CGI动态交互的过程,实际上就是在相对应的html文件中放入一个特定的标识符,如【%!prt-str】,这里前面的【%! 】是固定的,后面的led-io自己定义。
有了这样一个标识符,在上面陈述的网页打开的过程中,就会发现这个标识符后返回到服务器端寻找这个标识符对应的程序,然后执行这个程序。
图片生成的数组较大,放在单片机/系统的flash中未免太占资源,在RAM中动态生成也不太显示,因此这里提供这样一条思路:摄像头采集图片后将其保存为BMP格式(也可以是其他格式,但这样会存在额外的编码解码过程),随后用相关程序将其转换为十六进制表示的数组,随后为其加上前面uip规定的帧头,最后在对应的cgi程序中发送。但是这里可能存在的一个问题就是利用文件系统读取回的数据每一个字符都按照符号进行了处理,例如0x1a可能就变成了'0'、'x'、'1'、'a'这样四个字符。为此可以探索这样的方法:将BMP转换为十六进制值对应的ASCII符号,这样读回ASCII符号后就知道了对应的十六进制值,然后在CGI程序中,也就无需读取全部数据了,可以尝试做一个地址指针的映射,这样就可以对SD卡中这部分数据的调用了。
- 2013.7.7 webserver动态相关
- webserver
- webserver
- webserver
- WebServer
- webserver
- WebServer
- webServer
- WebServer
- windows下搭建webserver(apache2.4+mysql5.7+php5.6)
- WebServer 应用
- webserver&applicationserver
- WCF Webserver
- webserver配置
- Larbin: Webserver
- webserver基础
- Cherokee webserver
- nginx-WebServer
- DXP,AD不用新建PCB完美解决unknown pin和failed
- Profibus报文解读【转】
- (db2 迁移)windows db2 数据库脚本导出 aix db2 导入
- TF卡 SD卡接口【转】
- ICC位操作
- 2013.7.7 webserver动态相关
- 2013.7.9 有关K60 JTAG下载
- DP83848硬件设计及其调试
- Labview相关驱动插件的卸载\安装——以VISA驱动为例
- Labview中函数节点控件DLL的使用
- Word中利用Mathtype/公式编辑器实…
- uboot1.1.6源码编译的EABI问题
- HDU-1839 Delay Constrained Maximum Capacity Path 最短路
- Windows下SVN服务的搭建和使用(二)-Win32Svn