2013.7.7 webserver动态相关

来源:互联网 发布:手机论坛下载软件 编辑:程序博客网 时间:2024/06/06 19:39
今天完成了利用CGI实现网页与K60为MCU的服务器间的交互

先说说uip的webserver中数据交互的过程,如下图所示。其中UIP_APPCALL函数放在了httpd-cgi.c文件中
2013.7.7 <wbr>webserver动态相关

这里引用阿莫论坛网友的一段话【在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自己定义。
有了这样一个标识符,在上面陈述的网页打开的过程中,就会发现这个标识符后返回到服务器端寻找这个标识符对应的程序,然后执行这个程序。
2013.7.7 <wbr>webserver动态相关
2013.7.7 <wbr>webserver动态相关

2013.7.7 <wbr>webserver动态相关



    接下来讲一讲图片的动态显示。
图片生成的数组较大,放在单片机/系统的flash中未免太占资源,在RAM中动态生成也不太显示,因此这里提供这样一条思路:摄像头采集图片后将其保存为BMP格式(也可以是其他格式,但这样会存在额外的编码解码过程),随后用相关程序将其转换为十六进制表示的数组,随后为其加上前面uip规定的帧头,最后在对应的cgi程序中发送。但是这里可能存在的一个问题就是利用文件系统读取回的数据每一个字符都按照符号进行了处理,例如0x1a可能就变成了'0'、'x'、'1'、'a'这样四个字符。为此可以探索这样的方法:将BMP转换为十六进制值对应的ASCII符号,这样读回ASCII符号后就知道了对应的十六进制值,然后在CGI程序中,也就无需读取全部数据了,可以尝试做一个地址指针的映射,这样就可以对SD卡中这部分数据的调用了。



原创粉丝点击