《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 嵌入式系统Web服务器应用研究开发
嵌入式系统Web服务器应用研究开发
来源:微型机与应用2011年第11期
魏宏安,徐艺文,金志涛
(福州大学 物理与信息工程学院,福建 福州 350002)
摘要: 介绍了一种嵌入式Web服务器应用系统。该系统借鉴传统服务器系统架构,基于B/S结构模式设计,移植嵌入式TCP/IP协议栈,利用CGI技术以实现客户端和服务器端的动态数据交互。通过本研究可方便实现系统管理、远程终端参数设置等实际应用。
Abstract:
Key words :

摘  要: 介绍了一种嵌入式Web服务器应用系统。该系统借鉴传统服务器系统架构,基于B/S结构模式设计,移植嵌入式TCP/IP协议栈,利用CGI技术以实现客户端和服务器端的动态数据交互。通过本研究可方便实现系统管理、远程终端参数设置等实际应用。
关键词: 嵌入式系统;Web服务器;B/S结构模式; TCP/IP协议栈;CGI

 信息技术、网络技术以及嵌入式技术的飞速发展和融合,在嵌入式系统中内嵌TCP/IP协议,将Web服务器技术引入到嵌入式系统中,可使其系统与现今最大的网络Internet实现无缝连接。嵌入式系统组成的三个基本要素[1]为:嵌入、专用性和计算机。根据嵌入式系统本身特性优化设计,引入开源TCP/IP协议栈,并根据需要进行裁剪,利用公共网关接口(CGI)应用开发,嵌入式Web服务器可以向任何接入它所在网络的合法用户提供统一的基于浏览器方式的操作和控制界面,提供特定交互功能。
1 嵌入式Web服务器的系统结构
 基于当前大型服务器使用的信息管理系统架构方案(数据库+Web服务器+动态网页技术),本文提出一种面向嵌入式、借助CGI网关接口开发的B/S结构模式Web服务器信息交互系统,与传统的两层C/S模式相比,其有如下优点:
 (1)系统架构维护方便,可根据需要更新客户端程序,不用像传统的两层C/S模式那样,必须更新所有客户端程序,使其保持一致,系统才可以运行管理。
 (2)客户机负载减轻,无须安装客户端软件,统一的Internet浏览器方便了用户的使用和服务端的应用开发,并提供了友好人机界面设计。
 (3)系统安全保障提高,避免了客户端与服务器的数据库直接相连。
B/S模式组成部分为:表示层:Web浏览器,显示逻辑部分,充当Client角色;功能层:Web服务器,事务处理逻辑部分;数据层:数据库服务器,数据处理逻辑部分。功能层和数据层共同充当Server角色。B/S模式架构如图1所示。

2 Microchip TCP/IP协议栈[2]
 协议接口设计借助于Microchip公司提供的免费协议栈——Microchip TCP/IP协议栈,它是基于TCP/IP的一套应用程序,类似于TCP/IP参考模型,Microchip TCP/IP协议栈将TCP/IP协议栈分为多层,如图2所示。每层的实现代码驻留在一个独立的源文件中,而服务和应用程序编程接口(API)是通过头文件或包含文件定义的。与传统TCP/IP协议栈实现方法的不同,Microchip TCP/IP协议栈添加了StackTask和ARPTask两个新模块。StackTask管理协议栈以及所有模块的操作,而ARPTask管理地址解析协议ARP(Address ResohJtion Protocol)层的服务。

 与完整、复杂的TCP/IP协议体系相比,在嵌入式Web服务器中并不需要实现所有的协议,而是基于嵌入式要素特点的要求以及嵌入式系统资源限制进行适量裁剪。来自客户端的数据信息通过RJ-45以太网接口和网络接口芯片传递给微控制器,微控制器通过内嵌的Microchip TCP/IP协议栈实现了地址解析(ARP)协议、Internet控制报文协议(ICMP)、IP协议、用户数据报(UDP)等协议的解析和封包,应用层上负责Web页面请求和应答的HTTP协议。本文设计的协议栈管理程序基于协议的层次性,具有模块化思想。当接收到正确的以太网帧后,根据以太网的数据类型将接收的数据送至相应的模块进行进一步处理。
3 CGI技术
 由于传统的Web服务器无法实现Web数据库访问功能,CGI技术充当了访问数据库的重要媒介。CGI是使用应用相关软件增强Web服务器的一种标准方法,可以用任何语言书写。CGI根据需求更新网页,是一种公共网关接口。它通过客户提供给Web服务器的各种信息,由Web服务器启动指定CGI模块函数,完成客户端与服务器端动态的交互,从而实现静态HTML网页无法实现的功能(如表单查询、数据库查询等)。通常CGI应用程序处于休眠状态,通过使用一定的网络事件触发回调函数来实现,并显示动态页面。例如,Web服务器收到一个URL里面包含的网页请求时,将执行结果返回给HTML网页,CGI可实现处理表格、数据库查询和电子邮件等操作。
3.1 CGI接口规范数据通信方式
 CGI定义的接口规范包括[3]环境变量、标准输入和标准输出。
3.1.1 环境变量
 环境变量是Web服务器与CGI程序进行数据传递的途径,其定义了CGI程序运行的环境。客户端和服务器端都将有关数据信息转换成各种变量,CGI模块函数从环境变量中提取服务器或是浏览器提供的参数信息(网络设备参数),以此获取客户端的信息。
3.1.2 标准输入
 标准输入(STDIN)指CGI函数获取Web服务器信息的一种规范,即使用HTML表单向Web服务器发送信息,通常CGI通过两种调用方式获取客户请求[4]。
 (1)通过URL直接调用,如http://192.168.16.108。
 (2)通过交互式Form调用,通常是用户输入信息主页后,点击“确认”按钮后启动CGI程序。提交数据有Get和 Post两种模式:Get通过环境变量传递给CGI程序,Post通过环境变量和标准输入传递给CGI程序。本文采取上述两种方式调用CGI模块函数,并通过交互式Form调用,采用Post提交数据方式,进行网络参数设置。

 


3.1.3 标准输出
 标准输出(STDOUT)是CGI输出的一种方式,指CGI程序处理结束后将结果(如应答信息)发送给Web服务器的一种方式。执行结果必须是浏览器能够显示的HTML标准格式。
3.2 CGI工作原理
 通过使用一定的网络事件触发机制(如客户机)向服务器发送HTTP请求,即调用CGI请求。CGI请求中的网络参数等信息是以标签指示的。当应用程序CGI模块函数被调用时,初始化工作区,把客户端请求从环境变量和标准输入中取出,创建局部变量以匹配请求中的标签。如果没有从客户端传来参数信息,则调用用户提供的函数以取得设备当前状态,显示给客户端浏览器。此外,用户可以通过网页操作界面设置设备新的工作网络参数并发给Web服务器。Web服务器利用CGI模块函数提取网络传送来的新网络参数,并利用应用程序设定设备新的状态,同时回送给客户端浏览器,通过客户端浏览器和Web服务器交互对设备进行控制。作为嵌入式应用开发,面对对象环境要求,嵌入到对象体系中,按对象的要求对其软件和硬件进行裁剪,就像标准的CGI作为独立可执行文件完成的功能,本文中的应用是作为一个CGI模块函数嵌入到Web服务器内部,统一编译后整体运行,作为用户Web开发的接口。
3.3 CGI工作流程
 CGI函数和服务器之间通过标准输入(STDIN)和标准输出(STDOUT)传递信息,如图3所示。服务器通过STDOUT向CGI函数传递需求信息,CGI函数读取环境变量和STDIN,根据流程将满足条件的信息输出给STDOUT。即对于Web服务器而言,STDOUT将信息流送至CGI函数的STDIN,CGI函数的STDOUT信息流将送至服务器的STDIN,从而形成一个环路。

4 Web服务器建立及工作过程
4.1 Web服务器建立

 实现动态Web页面的准备工作是利用HTML语言编写Web页及内建表单,依据Web网页提交的信息项目,编写对应的CGI模块程序。
 HTML 表单是一种把一组URL(如主机上的一个文件名)下的控件组成集合的方法,同时每个控件保持自己独立的标识。该表单仿效可填写的纸质表单,带有文本区域和选择框等。当用户填完表单,即通过网页形式设置设备的网络参数后,用户点击保存按钮,把它提交给服务器。在此过程中,服务器接收浏览器提取的表单信息,决定返回哪一个页面[5]。
 利用<Form></Form>标记将输入域组合起来,说明表单的名称、数据传达的目的地点以及传送方法等。
格式:<form method=METHOD  action=”URL”  name="FORM NAME">
 如上所述,本文表单设计如下
   …
 <form method="post" action="serverset.htm" name="serverset">
   …
 采用POST方式进行数据提交。
4.2 Web服务器工作过程
 客户端利用IE浏览器登录到服务器发出服务器请求,此处的服务器就是VOIP系统通话终端设备。服务器响应用户请求,并引导到指定的脚本程序,即CGI模块函数。处于安全的考虑,需要进行相应的身份验证,身份验证登录界面如图4所示。

 身份验证后,执行CGI应用程序,进入终端网络参数信息的设置主页面,以达到通过网络远程控制嵌入式设备的目的,如图5所示。
 点击左栏的网络应用配置,进入到网络应用配置页面,HTML表单语言为:
 ~inc:header.inc~
 <div id="content">
 <h1>网络应用配置 </h1>
 <form method="post" action="serverset.htm" name="serverset">
 <fieldset>
 注册服务器的语言为:
 <div><label>IP地址:</label>
 <input type="text" name="regip" value=
 "~config_regserverip~" /></div>

  注册服务器IP地址以标签(config_regserverip)指示,点击保存按钮后,服务器进行相应处理,此时,提取文本框中用户的输入信息“192.168.16.104.”替换标签,即利用表单域中的值进行替换,以达到用户远程对设备参数的设置功能。所以<input type="text" name="regip" value="~config_regserverip~"/></div>变成了<input type="text" name="regip" value="192.168.16.104" /></div>。
 然后利用自定义HTTPPrint_config_regserverip()函数直接定向到TCP连接,将用户设置参数信息显示在HTML表单页面里。
 case 0x00000034:
            HTTPPrint_config_regserverip();
            break;
 void HTTPPrint_config_regserverip(void)
 {
     TCPPutString(sktHTTP, NetConfig.ServerIP);
     return;
 }
 最终配置页面如图6所示,完成远程配置任务。

 终端参数控制只是B/S模式嵌入式Web远程控制系统的一个简单应用,借助于CGI技术实现了Web服务器和客户端之间的动态交互,使得用户能在网络环境的多种平台上充分利用统一的客户工具——浏览器,从而为网络化远程操作提供了可靠保障。
 本文设计的嵌入式Web服务器利用以太网作为通信介质,具有最大的普及范围;采用标准公开化的HTTP通信协议,独立于系统平台,在客户端使用任意与Internet互连的标准PC(标准浏览器)可以实现随时随地访问。所使用的Web架构独立于系统平台,可以移植到任何嵌入式设备中,使得该Web服务器具有通用性。经实际测试证明,该Web服务器性能稳定可靠,可应用在实时监控、网络电话等产品中。
参考文献
[1] 田泽.嵌入式系统开发与应用[M].北京:北京航天航空大学出版社,2005.
[2] Microchip Technology Inc. Microchip TCP/IP 协议栈[EB/OL].http://ww1.microchip.com/downloads/en/AppNotes/00833c.pdf, 2008-08-21.
[3] 李勇.CGI技术在嵌入式WEB服务器中的应用和实现[J].网络与通信,2008,24(30):110-111.
[4] 何克右.用CGI方式进行网页交互[J].交通与计算机,2000,18(1):22-23.
[5] JEREMY B.嵌入式系统Web服务器—TCP/IP Lean[M].陈向群等译.北京:机械工业出版社,2003.

此内容为AET网站原创,未经授权禁止转载。