新闻中心

EEPW首页>嵌入式系统>设计应用> ARM7的嵌入式Web服务器设计技术

ARM7的嵌入式Web服务器设计技术

作者: 时间:2010-09-30 来源:网络 收藏

3.2 对动态内容和动态表单的实现
先编写一个包含DATA x>动态标志和表单的HTML文件,再分别编写动态内容处理功能函数和表单分析处理函数。在建立HTTP服务器套接字之前,需要先安装好自己句柄,将网页中的动态标识与其对应的动态内容处理功能函数,以及表单标识与表单分析处理函数相关联。图2中的动态内容/句柄API就是用来提供变量名/表单名与用户定义功能之间的联系。
动态内容安装句柄:
addDynamicContent(“temperature”,&getTemper);
表单安装句柄:
addDynamicHandler(/control,&myHandler);
其中,temperature和/control分别为网页中的动态内容标识和表单标识,getTemper和myHandler分别为动态内容处理功能函数和表单分析处理函数。
这样,每当有GET请求时,动态内容处理功能函数的返回值将替代动态标志的值嵌入到内容流中。每当有POST请求时,表单分析处理函数调用parseVarialbe功能,简单地在内容中查找变量名。一旦发现,这个值便被复制到用户缓冲器中,直到发现分界符“&”。POST构造一个包括报体的HTTP请求报文,发送给Web服务器。该报文按照键值对其进行组装,使用符号“&”分隔。
3.3Web服务器主程序
Web服务器主程序流程如图3所示。本设计中使用的Web服务器套接字是典型的TCP流套接字。通过socket()创建一个套接字,使用bind()将该套接字绑定在80端口上,通过listen()设定监听的连接数,最后调用accept()等待Web客户机的连接请求。一个套接字支持一个请求,不能支持永久型连接。当服务器接收到一个连接时,功能函数handleConnection()对用户请求进行解析,根据返回的内容关闭客户机套接字,然后等待另一个套接字请求。

本文引用地址://m.amcfsurvey.com/article/151465.htm

3c.JPG


对handleConneetion()功能函数(请求报文分析程序)分析如下:
①在HTTP请求报文中进行读操作,从该套接字循环读取,直到满足以下两个条件之一:查找到Content_Length报头,确定报文报体大小;请求若为post方法,简单地查找+QUERY文本。
②处理HTTP请求类型。对请求报文的第一个令牌进行识别。如果为GET请求,则从中分析请求的文件名,使用lookupFilename()功能函数查找该文件名,若没有则发送适当的状态码给请求者,若有则调用returnFile原语通过套接字来发送请求文件。如果为HTTP POST请求,则再次分析文件名,然后通过call Dynamic Handle功能函数调用一个用户定义的功能处理请求。若既非GET请求,也非POST请求,则返回状态码“not implemented”。

4 应用程序文件系统的构造
本设计使用一个特殊的buildfs应用程序将网页文件编译为顺序的数据结构,它将网页文件所在的目录路径作为变量,将这个变量作为内容树的根。遍历内容树,将遇到的每个文件累计到应用程序文件系统结构中,并写入文件filedata.c。文件filedata.c作为工程文件的一部分,一同被编译、下载到硬件上。buildfs生成的应用程序文件系统结构如表1所列。当定位一个文件时,只需找到文件报头,将文件项目的文件名和源文件名进行比较。若文件匹配,则可将后来检索的元素调出。

3d.JPG

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


关键词:嵌入式

评论


相关推荐

技术专区

关闭