APP下载

DM365系统中Web参数传递机制的研究

2012-08-10孙万源戴声奎张冰冰

通信技术 2012年5期
关键词:表单C语言嵌入式

孙万源,戴声奎,张冰冰

(华侨大学 信息科学与工程学院,福建 厦门 361021)

0 引言

在Web参数传递的过程中需要解决2个问题,其一是选择一个适合系统的嵌入式服务器;其二是选择一种动态Web[2-4]页面的实现机制。目前在嵌入式系统中常用的服务器有3种:Boa、thttpd和httpd,其中httpd只支持静态页面,而thttpd在运行过程中所耗费的系统资源要远大于 Boa,因此本文采用Boa[5]作为 DM365的 Web服务器。实现动态 Web页面一般有3种技术可供选择:CGI、ASP和PHP。因为目前嵌入式linux对ASP,PHP等动态Web页面技术支持还不完善,而 CGI技术已较为成熟,,本文采用了CGI[6-7]实现动态Web页面。

在DM365系统中,用传统的CGI运行机制传递参数会导致页面跳转使得客户端无法稳定的浏览监控页面,本文改进了CGI的运行机制,从而使页面能够实时监控。

1 动态Web的作用

在DM365达芬奇系统中,TI已经设计出完整的方案使得视频图像能够实时的采集并且播放,但是简单的采集和播放显然不能满足当前视频监控的需要。在很多实际应用中,客户需要在客户端通过Web参数传递控制远端的DM365设备(例如云台的控制),以及一些视频智能分析和处理(例如人脸识别,车牌识别,越界报警等等)。

由图1能够看到动态Web在系统中的作用,它承担着主机端(DM365)向客户端传输视频流以及客户端向主机端传递动态参数的任务。

图1 嵌入式Web在监控系统中的作用

2 Web服务器的实现

嵌入式Web服务器以TCP/IP协议为基础,给客户端浏览器和主机端硬件提供一个统一的接口,使得客户端浏览器能够像在本地一样透明的管理和监视设备的运行情况。嵌入式Web服务器主要功能有:响应多个客户的实时HTTP请求,并为每个客户建立连接;设备的实时管理和参数配置;对设备访问的安全控制机制,包括SSL、用户口令等;实现设备的故障智能报警。

2.1 Boa服务器的移植

Boa服务器是一个能够运行在 linux[8-9]操作系统下,支持CGI、特别是嵌入式设备中的单任务Web服务器,源代码公开、性能高,现将其移植到DM365系统中,具体步骤如下:

1)从http://www.Boa.org/下载Boa源码、解压到工作目录。

2)进入 Boa/src目录,修改 defines.h文件中SERVER_ROOT参数值:

马连长把全连的班长、副班长排在了“敢死队”前面,倪二泉自告奋勇,排在了第一,排在第三位的则是四班长陈山利。

#define SERVER_ROOT "/etc/Boa"。

3)在终端输入#./configure得到makefile文件,修改makefile中编译器的选项:

CC =gcc,改成: CC= arm_v5t_le-gcc;CPP = gcc-E,改成:CPP=arm_v5t_le-g++ -E。

4)在终端输入#make编译出可执行程序Boa;输入#arm_v5t_le-strip Boa去除调试信息,最终得到发布版本Boa,将其放入DM365文件系统中的/bin目录下。

2.2 Boa服务器的配置

在 Boa服务器移植成功后需对其做相应的设置,将 workspace/Boa/目录下的配置文件 Boa.conf复制到DM365文件系统中的/etc/Boa目录下(和移植中第2步的SERVER_ROOT 保持一致),该文件重要配置如下:

3 实现动态Web的CGI技术

3.1 CGI的工作过程

CGI程序与Web服务器的通信、参数的传递是根据环境变量(QueryString)、命令行参数的设置和标准输入输出(stdin/stdout)来进行的。Web服务器提供客户端浏览器和CGI程序数据交换的通道。交互过程如图2所示。

图2 Web服务器和CGI程序的交互

3.2 CGI的编程语言的选择

CGI程序几乎可以用任何的编程语言来实现,例如linux的Shell、Perl、C语言等。但是由于C语言的跨平台性,以及C语言程序设计的方便,本文采用C语言来作为CGI的开发语言,并采用CGIC函数库开发CGI程序(CGIC库是一种开源可以免费使用的 CGI库函数,它封装了一些 C语言开发CGI程序所常用的操作)。

4 动态Web的编程实现

4.1 Web服务器网页的编写

在 Web页面数据交互中常用的方式是表单提取,表单提取有3种方法:GET、POST和URL附上链接。GET方式一般用于获取数据,URL附上链接方式不安全,而POST方式是用于传递数据,Web数据传递是客户端向主机端传递数据,故采用POST方式。以最简单的在DM365中实现云台协议中的右转作为范例,编写网页[10],核心代码如下:

其中form action定义表单提取时候进行的动作是访问DM365文件系统中right.cgi,method定义表单提取方法是post,input type是定义提取的方式是submit,name定义表单的名字right,value定义表单的值right。当客户端浏览器点击submit提取表单的时候事实上是向 CGI程序传入 name=value的值即“right=RIGHT”。

4.2 利用CGIC编写CGI程序

CGIC函数库从 www.boutell.com/cgic下载。CGIC函数库包含了cgic.c,cgic.h等文件,由于所有的CGI程序都需要进行一些必要的初始化操作,比如分析数据检查环境变量,这些都是在 cgic.c文件中定义,所以 CGIC库提供了自己的 main()。在用 CGIC来开发自己的 CGI程序时就不能再使用main(),而只能使用 CGIC提供的 cgiMain()来开始自己的程序。现以4.1节所要访问的right.cgi为例编写CGI程序:

4.3 结果与分析

修改cgic目录下makefile中的编译器选项(同2.1节所用方法一样),在终端下输入#make将生成的right.cgi放入文件系统的/www/httpd/cgi-bin/目录下,并将4.1节编写的网页放入/www/httpd/目录下。启动DM365开发板,在客户端输入DM365开发板的IP:192.168.1.168,在点击表单right后,和DM365相连的云台开始右转,但是页面会跳转至http://192.168.1.168/cgi-bin/right.cgi,而在实时视频监控中,需要页面始终保持在监控页面http://192.168.1.168中,不能发生跳转。

5 CGI运行机制的改进

要使页面始终保持在监控页面中,有两种方法可以实现:

1)在cgi程序中加入页面跳转语句,使得页面在跳转后能够自动跳转回监控页面。

具体代码是在4.2编写的CGIC程序中添加语句:

这段代码设置cgi向HTML页面打印的刷新时间为0秒,跳转IP是192.168.1.168(监控页面IP)。但是具体测试的时候无法达到 0秒跳转回监控页面,这是因为网络传输和 cgi程序的运行会占用一部分时间,所以页面会发生停顿现象,达不到实时监控的效果。

2)在网页编程中加入后台运行的语句,使得页面在访问cgi程序的时候,开辟一个新线程使cgi程序以后台方式运行,,具体需在4.1节的关键代码处进行相应的修改:

和4.1节比较,多定义了一个标签iframe,iframe元素会创建包含另外一个文档的内联框架。上述代码是在form中定义一个外部打开的target=right,当表单提取的时候不会立即链接到form action所指向的地址中,而是在iframe中找到对应name=right,执行 iframe对其定义的操作 style="display:none",即在执行form action的时候不发生页面跳转。经过测试页面不再发生跳转,消除了页面停顿的现象,符合实时监控的要求。

6 结语

本文对Web参数传递中2个关键的环节(Web服务器的选取和Web动态页面实现机制)进行了深入的分析,最终采用Boa服务器作为Web服务器,CGI作为实现的动态页面机制。在文章的最后还以实现云台右转为例改进了传统的动态页面实现的方式,实验结果表明,在动态参数进行传递时,页面不发生任何变化,DM365监控系统能够实时监控。

[1] 圣钱生,张桂英,吴有俊.基于 DaVinci的自动对焦算法研究及实现[J].通信技术,2012,45(01):56-58.

[2] 杨林,杨鹏,李长齐.Web 应用漏洞分析及防御解决方案研究[J].信息安全与通信保密,2011(02):58-63.

[3] 倪奕.基于 JBoss 实现 Web 服务与通信业务整合[J].通信技术,2011,44(12):121-124.

[4] 韩鲲,薛辉.Web 数据库的安全审计机制[J].信息安全与通信保密,2011(06):92-94.

[5] BENTHAM J.嵌入式系统Web服务器[M].北京:机械工业出版社,2003:256.

[6] 李磊.利用CGI程序实现动态W eb的方法[J].计算机科技与工程,2009,9(06):1611-1613.

[7] BERLIN D J.精通 CGI编程[M].北京:清华大学出版社,1998:1.

[8] 华清远见嵌入式培训中心.嵌入式 Linux应用程序开发标准教程[M].北京:人民邮电出版社,2009:1.

[9] 吴士力,刘奇,朱兰.嵌入式 Linux应用开发全程解析与实践[M].北京:机械工业出版社,2010:2.

[10] 祁大鹏.Dreamweaver CS4实用教程[M].北京:电子工业出版社,2010:1.

猜你喜欢

表单C语言嵌入式
电子表单系统应用分析
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
基于Visual Studio Code的C语言程序设计实践教学探索
51单片机C语言入门方法
TS系列红外传感器在嵌入式控制系统中的应用
基于图表示和匹配的表单定位与提取
基于C语言的计算机软件编程
浅谈网页制作中表单的教学
搭建基于Qt的嵌入式开发平台
高职高专院校C语言程序设计教学改革探索