收藏 分销(赏)

ARM平台嵌入式WEB服务器的设计和实现.doc

上传人:快乐****生活 文档编号:2954401 上传时间:2024-06-12 格式:DOC 页数:52 大小:1.42MB
下载 相关 举报
ARM平台嵌入式WEB服务器的设计和实现.doc_第1页
第1页 / 共52页
ARM平台嵌入式WEB服务器的设计和实现.doc_第2页
第2页 / 共52页
ARM平台嵌入式WEB服务器的设计和实现.doc_第3页
第3页 / 共52页
ARM平台嵌入式WEB服务器的设计和实现.doc_第4页
第4页 / 共52页
ARM平台嵌入式WEB服务器的设计和实现.doc_第5页
第5页 / 共52页
点击查看更多>>
资源描述

1、()本科毕业设计(论文)资料 题 目 名 称:ARM平台嵌入式WEB服务器设计和实现 学 院(部):计算机和通信学院 专 业:通信103班 学 生 姓 名:伍柏林 班 级:通信103 学号: 指导老师姓名:叶玮琼 职称: 最终评定成绩: 湖南工业大学教务处湖南工业大学本科毕业论文(设计)诚信申明本人郑重申明:所呈交毕业论文(设计),题目ARM平台嵌入式WEB服务器设计和实现是本人在指导老师指导下,进行研究工作所取得结果。对本文研究作出关键贡献个人和集体,均已在文章以明确方法注明。除此之外,本论文(设计)不包含任何其它个人或集体已经发表或撰写过作品结果。本人完全意识到本申明应负担责任。作者署名:

2、伍柏林日期: 年 4 月 23 日摘 要论文关键介绍了基于ARM9嵌入式Web服务器Boa软、硬件设计及其实现,其中硬件部分关键是三星S3C2440为处理器。最终结果形式为能够远程访问WebServer嵌入式服务器。Boa是一款单任务HTTP服务器。和其它传统Web服务器不一样是当有连接请求到来时,它并不为每个连接单独创建进程, 也不经过复制本身进程来处理多链接。而是经过建立HTTP请求列表来处理多路HTTP连接请求。同时它只为CGI程序创建新进程,这么就在最大程度上节省了系统资源,这对嵌入式系统来说至关关键。同时它还含有自动生成目录、自动解压文件等功效。所以, Boa在嵌入式系统中含有很高应

3、用价值。关键词:ARM;Linux;嵌入式Web服务器;CGIAbstractThis paper has mainly developed the software hardware design and realization of the embedded Web server Boa based on ARM. And the core of the hardware part is S3C2440 microprocessor produced by Samsung . The final achievement is the embedded webserver which can

4、 remote visit. Boa is a single-tasking HTTP server. That means that unlike traditional webservers, it does not fork for each incoming connection, nor does it fork many copies of itself to handle multiple connections. It internally multiplexes all of the ongoing HTTP connections. And forks only for C

5、GI programs, this is very important to embedded system. At the same time, it also has the function of automatic directory generation、automatic file gunzipping and so on. So Boa is of highly value in the embedded system application. Keywords: ARM;Linux;Embedded Web server;CGI第一章 引言6第二章 课题背景72.1 嵌入式系统

6、介绍82.2 嵌入式系统和Linux82.3 ARM9硬件平台92.3.1 ARM介绍92.3.2 mini2440嵌入式开发板9第三章 建立嵌入式系统开发环境102.1 在Vmware下安装ubuntu12.04112.2 虚拟机配置122.2.1 安装配置tftp服务器122.2.2 配置NFS服务器132.2.3 交叉编译器配置13第四章 系统移植144.1 Uboot移植144.2.U-boot烧写144.3.1 u-boot功效144.3.2 使用DNW烧写u-boot144.3.3 使用H-Jtag烧写u-boot154.3Linux内核移植154.3.1 Linux kernel

7、 下载164.3.3 Linux内核配置和编译164.4 文件系统移植174.5 加载Linux内核映像174.6 Boa Web服务器移植184.6.1 Boa Web服务器建立184.7 Linux下动态Web页面实现194.7.1 CGI程序分析194.7.2 Form输入分析和解码21第五章 嵌入式Web服务器225.1 概述225.2 Web服务器原理235.3 嵌入式Web服务器实现原理235.3.1 TCP/IP协议235.4 嵌入式Web服务器Boa245.4.1 Boa概述245.4.2 Boa功效实现24第六章 CGI技术256.1 CGI概述256.2 CGI工作原理26

8、第七章 系统功效测试287.1 测试Web服务器287.2 动态Web页面测试29结束语32致谢33参考文件34附录35第一章 引言伴随计算机技术发展,嵌入式系统已成为计算机领域一格关键组成部分。以ARM体系结构设计微处理器含有高性能、低功耗和低成本特点,它广泛应用于嵌入式系统设计领域,是现在最广泛32位微处理器。以前设备控制系统通常是经过通信线路进行,其通信介质、通信协议、相关软件和硬件全部是专用,而Internet 技术发展使嵌入式设备远程控制和管理方法有了改变。不需要专用通信线路,而且传输信息不局限于数据信号,还有声音和图像。最终要是其通信协议是标准且公开。伴随Web技术发展,几乎改变了

9、现在信息表示形式,很多应用全部是基于Web技术。因为HTML语言标准统一性,只要在嵌入式设备中有一个微型服务器,就能够使用任意一个Web浏览器接收和发送信息。所以怎样设计这种尤其Web服务器,怎样在嵌入式设备中安装Web服务器,就成了嵌入式Web服务器发展和研究方向。对于嵌入式Web服务器研究和应用,其意义是重大,它为我们管理、控制和监测多种多样设备提供了一个很好路径。这种设备能够是含有有限内存资源8位或16位系统,已足够提供一个用户界面,而且这种方法是基于Internet。这种设备能够在世界任何一个地方,只要它连入Internet就能够控制它。第二章 课题背景这章对嵌入式系统作了定义,具体介

10、绍了嵌入式Linux和嵌入式Linux在现代嵌入式系统中地位,最终介绍了此次课题硬件平台。2.1 嵌入式系统介绍嵌入式系统被定义为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功效、可靠性、成本、体积、功耗严格要求专用计算机系统。在制造工业、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等方面均是嵌入式计算机应用领域。嵌入式系统是将优异计算机技术、半导体技术和电子技术和各个行业具体应用相结合后产物,这一点就决定了它肯定是一个技术密集、资金密集、高度分散、不停创新知识集成系统。2.2 嵌入式系统和Linux伴随微处理器产生,价格低廉、结构小巧CPU和

11、外设连接提供了稳定可靠硬件架构,那么限制嵌入式系统发展瓶颈就突出表现在了软件方面。尽管从八十年代末开始,陆续出现了部分嵌入式操作系统,比较著名有Vxwork、pSOS、Nucleus和Windows CE。但这些专用操作系统全部是商业化产品,其高昂价格使很多生产低端产品小企业望而却步;而且源代码封闭性也大大限制了开发者主动性。另外结合中国实情,目前国家对自主操作系统大力支持,也为源码开放Linux推广提供宽广发展前景。还有,对上层应用开发者而言,嵌入式系统需要是一套高度简练、界面友善、质量可靠、应用广泛、易开发、多任务,而且价格低廉操作系统。在很快未来,从冰箱到收音机全部会内置处理器。因为Li

12、nux开放性,很多人认为Linux很适合多数Internet设备。她们认为Linux能够支持不一样设备,支持不一样配置。Linux对厂商不偏不倚而且成本极低,能够很快成为用于多种设备操作系统。现在,业界已经达成共识:即嵌入式Linux是大势所趋,其巨大市场潜力和酝酿无限商机肯定会吸引众多厂商进入这一领域。Linux为嵌入操作系统提供了一个极有吸引力选择,它是个和Unix相同、以关键为基础、完全内存保护、多任务多进程操作系统。支持广泛计算机硬件,包含X86,Alpha,Sparc,MIPS,PPC,ARM,NEC,MOTOROLA等现有大部分芯片。程式源码全部公开,任何人能够修改并在GNU通用公

13、共许可证(GNU General Public License)下发行,这么,开发人员能够对操作系统进行定制,再也无须担心像MS windows操作系统中后门威胁。同时因为有GPL控制,大家开发东西大全部相互兼容,不会走向分裂之路。Linux用户碰到问题时能够经过Internet向网上成千上万Linux开发者请教,这使最困难问题也有措施处理。Linux带有Unix用户熟悉完善开发工具,几乎全部Unix系统应用软件全部已移植到了Linux上。Linux还提供了强大网络功效,有多个可选择窗口管理器(X windows)。其强大语言编译器gcc、g+等也能够很轻易得到。不仅成熟完善、而且使用方便7。

14、选择Linux原因:1.可应用于多个硬件平台。Linux已经被移植到多个硬件平台,这对受开销、时间限制研究和开发项目是很有吸引力。原型能够在标准平台上开发然后移植到具体硬件上,加紧了软件和硬件开发过程。2.Linux能够随意地配置不需要任何许可证或商家合作关系。3.它是无偿,源代码能够得到。这是最吸引人。毫无疑问,这会节省大量开发费用。4.它本身内置网络支持。5.Linux高度模块化使添加部件很轻易。6.Linux在台式机上成功,使大家看到了Linux在嵌入式系统中辉煌前景。2.3 ARM9硬件平台2.3.1 ARM介绍广义地讲,通常带有微处理器专用软硬件系统全部能够称为嵌入式系统。它是嵌入到

15、对象体系中专用计算机系统,以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功效、可靠性、成本、体积、功耗等严格要求专用计算机系统。ARM作为嵌入式系统得关键,既能够认为是一个企业名字,也能够认为是对一类微处理器通称,还能够认为是一个技术名字,现在很流行ARM内核有ARM7TDM1、StrongARM、ARM720T、ARM9TDM1、ARM920T、ARM940T、ARM946T、ARM966T、ARM10TDM1等。本文所讨论目标板CPU为ARM920T内核三星S3C2410芯片。下面介绍该微处理器特点及其应用领域。ARM9系列微处理器在高性能和低功耗特征方面提供最好性能。它含

16、有以下特点:l 提供1.1MIPS/MHz5级流水线结构;l 支持32位ARM指令集和16位Thumb指令集;l 支持32位高速AMBA总线接口;l 全性能MMU,支持Windows CE、Linux、Palm OS等主流嵌入式操作系统;l MPU支持实时操作系统;l 支持数据Cache和指令Cache,含有更高指令和数据处理能力。ARM9系列微处理器关键应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字摄影机和数字摄像机等。它包含ARM920T、ARM922T和ARM940T三种类型,以适适用于不一样应用场所。S3C2410X是一款由Samsung企业设计低功耗、高集成度基于ARM

17、920T核微处理器。这款芯片集成了以下部件:16KB指令Cache、16KB数据Cache、MMU、外部存放控制器、LCD控制器(STN和TFT)、NAND Flash控制器、4个DMA通道、3个URT通道、一个I2C总线控制器、一个I2S总线控制器,和4个PWN和1个内部定时器、通用I/O口、实时时钟、8通道10位ADC和触摸屏接口、USB主、USB从、SD/MMC卡接口等。现在它广泛应用于PDA、移动通信、路由器、工业控制等领域3 。2.3.2 mini2440嵌入式开发板Mini2440是一套硬软件集成、基于ARM完整开发板,该系统包含丰富硬件资源、完善而优越调试手段和详尽资料9。Min

18、i2440目标处理器采取Samsung企业S3C2440微处理器,是友善之臂企业出品一款商业性质开发板,嵌入式开发全部过程全部可在该环境下完成。系统有以下组成部分:u ADT IDE集成开发环境;u 多种连接线、电源适配器和学习光盘等;u 教学试验系统配套光盘。Mini2440开发板模型图1所表示:图1.开发板模型示意图第三章 建立嵌入式系统开发环境本章具体介绍了嵌入式系统开发环境建立,Linux内核编译,目标板中U-boot烧写等。 2.1 在Vmware下安装ubuntu12.04安装过程很简单,在网关配置中我选是桥接,安装完后图所表示1) 安装Vmware Tools。进入系统后,点击虚

19、拟机上安装vmware tools.打开终端(应用程序-附件-终端)。在命令行输入“ls”后将列出文件夹文件;接着输入“cd vmware-tools-distrib”指定到此文件夹,接着输入“ls”列出此文件夹内容,接着输入“sudo ./vmware-install.pl”,输入用户密码便可开始安装了。安装完成后重启,安装vmtool能够实现虚拟机和物理机之间文件共享。2.2 虚拟机配置2.2.1 安装配置tftp服务器1、安装相关软件包apt-get install tftpd (服务端)apt-get install tftp (用户端)apt-get install xinetd2、

20、建立配置文件cd /etc/xinetd.d/vi tftp输入service tftpsocket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /tftpbootdisable = noper_source = 11cps = 100 2flags = IPv4存盘退出3、建立tftp服务文件目录mkdir /tftpboot4、重新开启服务/etc/init.d/xinetd restart安装完成!测试方法:在/tftpboot 目录下随便放个文件ab

21、c然后 运行tftp 192.168.123.202 进入tftp命令行输入get abc 看看是不是能把文件下下来,假如能够就能够了,也能够put 文件上去。检验tptp是否打开:chkconfig -list 假如没有打开,则用这个命令也能够打开:chkconfig tftp on或用ps -A | grep tftp看是否有tftpd服务2.2.2 配置NFS服务器 1.NFS安装 $ sudo apt-get install nfs-kernel-server nfs-common portmap2.NFS配置 2.1 配置/etc/exports文件 $ sudo vim /etc/

22、exports在文件最终加入以下内容: /rootnfs *(rw,sync,no_root_squash) 注:nfs许可挂载目录及权限在文件/etc/exports中进行了定义。其中:/rootnfs是要共享目录,*代表许可全部网络段访问,rw是可读写权限,sync是资料同时写入内存和硬盘,no_root_squash是nfs用户端分享目录使用者权限,假如用户端使用是root用户,那么对于该共享目录而言,该用户端就含有root权限。2.2.3 交叉编译器配置1、解压缩拷贝光盘目录arm-linux-gcc-4.3.2.tgz ,然后解压缩到/opt/FriendlyARM/mini2440

23、目录下,依据我在Ubuntu下试验。2、设置环境变量在/etc/profile中添加环境变量注意,需要重新注销或source一下配置文件profile, 环境变量才能生效。第四章 系统移植4.1 Uboot移植首先下载u-boot-.10,移植比较繁杂,参考mini2440uboot移植手册。4.2.U-boot烧写4.3.1 u-boot功效Mini2440使用u-boot作为bootloader,经过它能够实现以下功效: 1、烧写flash; 2、引导Linux操作系统及其它程序; 3、经过以太网下载Linux内核或其它程序并引导。 4.3.2 使用DNW烧写u-boot 经过USB方法,

24、首先需要安装USB驱动4.3.3 使用H-Jtag烧写u-boot 经过并行口方法烧写,需要安装H-Jtag软件4.3Linux内核移植 Linux内核移植能够分为板级移植和片级移植。对于Linux发行版本中已经支持CPU,通常只需针对板级硬件进行合适修改即可,这种移植叫做板级移植;而对于Linux发行版本中没有支持CPU,则需要添加对应CPU内核移植,这种移植叫做片级移植。片级移植相对板级移植来说要复杂很多,需要对Linux内核有详尽了解。本课题中所用Linux中已经包含S3C2440 ARM920T处理器移植包,下面将在此基础上介绍Linux板级移植基础过程和方法9。图19为本课题所采取试

25、验环境和开发步骤。安装交叉编译器arm-linux-gcc;对Linux内核进行配置(make menuconfig),并选择适合本课题系统得相关配置;编译生成Linux映像文件ulmage;经过u-boottftp命令将该文件下载到目标板并实施。这将在下面内容中作介绍。 安装Linux安装arm-linux-gcc配置makemenucongfig编译运行Linux下载Linux映像文件开启u-boot图19.JXARM9-2410 Linux开发步骤4.3.1 Linux kernel 下载4.3.3 Linux内核配置和编译1. Linux源代码结构Linux源代码组织成以下结构,根目录

26、是/home/cvtech/jx2410/linux。内核文件组织结构为:1) arch/arm:和架构和平台相关代码全部放在arch目录下。针对ARMLinux,有一个子目录和它对应arm。2) drivers:包含全部设备驱动程序。驱动程序又被分为“block”、“char”、“net”等多个类型。3) fs:这里有支持多个文件系统源代码,几乎一个目录就是一个文件系统,如MSDOS、VFAT、proc和ext2等。4) include:相关头文件。它们被分成通用和平台专用两部分。目录“arm-$(ARCH)”包含了平台相关头文件。5) init:含部分开启kernel所需做全部初始化动作,

27、里面有一个main.c,针对kernel做初始化动作、设置部分参数等,并对外围设备初始化。6) ipc:提供进程间通信机制源代码,如信号量、消息队列和管道等。7) kernel:包含进程调度算法源代码,和和内核相关处理程序,比如系统调用。8) mm:用来存放内存管理源代码,包含MMU。9) net:支持网络相关协议源代码。10) lib:包含内核要用到部分常见函数。如字符串操作、格式化输出等。11) script:包含在配置和编译内核时要用到脚本文件。2Linux内核源码移植修改参考mini2440linux移植手册4.4 文件系统移植nandflash采取yaffs2文件系统4.5 加载Li

28、nux内核映像1. 将mini2440串口0和PC串口连接,mini2440网卡和PC网卡使用直连网线进行连接,或将mini2440和PC机使用一般网线接入同一局域网。ARM试验箱IP为192.168.1.45,虚拟机下LinuxIP设为192.168.1.180,宿主机IP设为192.168.1.145。 2. 将mini2440上电,正常情况下将在终端DNW中看到bootloader菜单界面。在bootloader中根据图24提醒进行: 4.6 Boa Web服务器移植4.6.1 Boa编译建立Boa Web服务器包含以下步骤:1.下载Boa源代码。Boa web服务器源代码能够从下载,本

29、文中下载文件为:boa-0.94.13.tar.gz,为目前最新版本。2. 安装并编译Boa源代码。1) 经过Vmware Tools中文件共享将Windows下下载Boa源代码复制到/home/cvtech/jx2410/examples/目录下。2) 安装源代码:#cd /home/cvtech/jx2410/examples/#tar zxvf boa.tar.gz#cd boa/src 生成Makefile文件# ./configure3) 修改Makefile文件,找到CC=gcc,将其改成CC = arm-linux-gcc,再找到CPP = gcc E,将其改成CPP = arm

30、-linux-gcc E,并保留退出。4) 运行make进行编译,在boa/src目录下将生成 Boa文件,该文件即为Boa Web服务器实施文件。将调试信息剥去,得到最终程序只有约60KB大小。#CC/usr/local/arm/2.95.3/bin/arm-linux-gcc make 3.配置Boa Web服务器,使其能够支持CGI程序实施。Boa开启时将加载一个配置文件boa.conf,在Boa程序运行前,必需首先编辑该文件,并将其放置于src/defines.h文件中SEVERROOT宏定义所定义缺省目录,或在开启Boa时使用参数“-c”指定boa.conf加载目录。在boa.con

31、f文件中需要进行部分配置,下面作简明介绍:1) Port:该参数为boa服务器运行端口,缺省端口为80。2) ServerName:服务器名字。3) DocumentRoot:HTML文档根目录。提议使用绝对路径表示,如“/mnt/jffs2/web”,假如使用相对路径,则它是相对服务器根目录。 4) ScriptAlias :指定CGI程序所在目录,通常全部CGI脚本全部要放在实际路径里,用户访问实施时输入站点+虚拟路径+CGI脚本名,本课题中CGI路径设为:ScriptAlias /cgi-bin/mnt/jffs2/web/i-bin/。5) CGIPath: /bin:/usr/bin

32、:/usr/local/bin,提供CGI程序PATH环境变量值。用户能够依据自己需要,对boa.conf进行修改,但必需要确保其它辅助文件和设置必需和boa.conf里配置相符,不然Boa就不能正常工作。 在上面例子中,我们还需要创建日志文件所在目录/var/log/boa,将mime.types文件拷贝 到/etc目录。mime.types文件用来指明不一样文件扩展名对应MIME类型,通常 能够直接从Linux主机上拷贝一个,大部分也全部是在主机/etc目录下。4.7 Linux下动态Web页面实现本课题中经过CGI程序来获取用户请求、查询条件,使用HTML方法描述结果并直接回送到用户端浏

33、览器上。生成动态网页步骤:(1) 用户在浏览器中提出数据或查询条件请求,并实施“提交”后,便将请求信息发送到网上对应Web服务器上; (2) Web服务器收到这一请求便激活一个CGI程序(程序是驻留在Web服务器上一个程序); (3) CGI程序调用该服务器下全部程序或数据库,并完成读者需要任务,同时将处理结果送回CGI网关接口; (4) 网关接口程序又将其结果转换成该服务器能识别HTML 文件格式,并确定CGI返回文档类型; (5) Web服务器将其结果送回浏览器中,浏览器进行数据处理并显示结果。因为C语言在平台无关性上表现不错(几乎在任何系统平台下全部有其对应编译器),而且对大多数程序员而

34、言全部算得上很熟悉(不像Perl),所以,C是CGI编程首选语言之一。CGI程序通常分为以下两部分9:l 依据POST方法或GET方法从提交表单中接收数据。本文中采取是GET方法。CGI程序必需检验REQUEST_METHOD环境变量以确定是否采取了POST方法,并决定是否要读取STDIN。l 用printf()函数来产生HTML源代码,并将经过解码后数据正确地返回给浏览器。将CGI测试程序 cgi_test/tar.gz复制到/home/cvtech/jx2410/examples/目录下。然后安装源代码:#cd /home/cvtech/jx2410/examples#tar zxvf c

35、gi_test.tar.gz#cd cgi-test#make#cp cgi_test /tftpboot 4.7.1 CGI程序分析CGI程序见附录1. 在cgi.c中定义了main()函数:1) 用“form_method = getRequestMethod();”将调用POST/GET方法信息存放在form_method中,调用POST,则为1;调用GET,则为0。2) 以下程序先定义了若采取GET方法则调用函数getGETvars();若采取POST方法则调用函数getPOSTvars来处理表单。if(form_method = POST) getvars = getGETvars(

36、);postvars = getPOSTvars(); else if(form_method = GET) getvars = getGETvars(); 3) 打印HTML表单,最终清空ARM中CGI程序使用缓存。htmlHeader(Demo Web Page);htmlBody();template_page(postvars, form_method)htmlFooter();cleanUp(form_method, getvars, postvars);fflush(stdout); exit(0); 2.cgivars.c:1) 该程序中先首先将XX形式十六进制数字(ASCII码

37、)转换成字符,再按URL编码规则解码%XX转换成字符。此部分程序将在6.5.2中给出具体分析。2) 以下程序首先读入字符串信息,比较字符串判定采取GET还是POST方法,信息返回到form_method。request_method = getenv(REQUEST_METHOD);if(request_method = NULL)return -1;if (!strcmp(request_method, GET) | !strcmp(request_method, HEAD) ) form_method = GET; else if (!strcmp(request_method, POST

38、) form_method = POST; else return -1;return form_method; 3) POST和GET方法处理表单程序见附录,假如请求方法 REQUESTMETHOD值为GET,CGI程序读入环境变量QUESTRYSTRING;假如请求方法为POST,CGI程序就可确定数据来自标准输入,依据CONTENTLENGTH值确定从读入数据流大小。在完成表单处理后调用函数cleanUp()来释放缓存空间。3. HTML表单制作11htmllib.c及template.c,介要分析以下:printf(Content-type: text/htmlnn%s, title)

39、;1) 此行经过标准输出将字符串“Contenttype:text/htmlnn%s,title)传送给Web服务器。它是一个MIME头信息,它告诉Web服务器随即输出是HTML源代码。请注意在这个头信息中有两个新行符,这是因为Web服务器需要在实际文本信息开始之前先看见一个空行。printf(, /cgi-bin/cgi_test );2) 在HTML中参数 action 用以指明该 CGI 程式位置,这么此表单所填资料才能正确传给 CGI 作处理。传送资料给 CGI 方法,可选值为 POST, GET,用method来定义,此处定义为POST方法。printf(); printf();3)

40、 参数设定,type=Submit 设定输入方法为 Submit 或 Reset。value=submit或Reset ,这个值不是输给 CGI ,而是显示在按键上,能够不用,传送键内定值为 Submit Query,清除键内定值为 Reset。4.7.2 Form输入分析和解码当用户提交一个HTML Form时,Web浏览器首先对Form中数据以名字/值正确形式进行编码,并发送给Web服务器,然后由Web服务器传输给CGI程序。其格式以下: name1=value1&name2=value2&name3=value3&name4=value4&. 其中名字是Form中定义INPUT、SELE

41、CT或TEXTAREA等标置(Tag)名字,值是用户输入或选择标置值。这种格式即为URL编码,程序中需要对其进行分析和解码。要分析这种数据流,CGI程序必需首先将数据流分解成一组组名字/值对。这能够经过在输入流中查找下面两个字符来完成。 每当找到字符=,标志着一个Form变量名字结束;每当找到字符& ,标志着一个Form变量值结束。请注意输入数据最终一个变量值不以&结束。 一旦名字/值对分解后,还必需将输入中部分特殊字符转换成对应ASCII字符。这些特殊字符是: +:将+转换成空格符; %xx:用其十六进制ASCII码值表示特殊字符。依据值xx将其转换成对应ASCII字符。 对Form变量名和

42、变量值全部要进行这种转换。下面是CGI中对Form数据进行分析并将结果回送给Web服务器程序分析。char hex2char(char *hex) char char_value;char_value = (hex0 = A ? (hex0 & 0xdf) - A) + 10 : (hex0 - 0);char_value *= 16;char_value += (hex1 = A ? (hex1 & 0xdf) - A) + 10 : (hex1 - 0);return char_value;void unescape_url(char *url) int n, k;for(n=0, k=0;urlk;+n, +k) if(urln = urlk) = %) urln = hex2char(&urlk+1);k += 2;urln = 0;上述程序首先将XX形式十六进制数字(ASCII码)转换成字符,再按 URL编码规则解码%XX转换成字符。 第五章 嵌入式Web服务器5.1 概述伴随计算机技术发展,嵌入式系统已成为计算机领域一格关键组成部分。伴随网络技术发展,使得B/S(用户端/服务器)应用方法已成为一个时尚。它基础是用户端要有一个浏览器程序,

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服