嵌入式LINUX系统中HTTP协议的实现方法研究-嵌入式论文

上传人:1** 文档编号:359564 上传时间:2018-06-28 格式:DOC 页数:38 大小:504.77KB
返回 下载 相关 举报
嵌入式LINUX系统中HTTP协议的实现方法研究-嵌入式论文_第1页
第1页 / 共38页
嵌入式LINUX系统中HTTP协议的实现方法研究-嵌入式论文_第2页
第2页 / 共38页
嵌入式LINUX系统中HTTP协议的实现方法研究-嵌入式论文_第3页
第3页 / 共38页
点击查看更多>>
资源描述
第 0 页 共 38 页论文题目:嵌入式 LINUX 系统中 HTTP 协议的实现方法研究学 生 姓 名: 指 导 老 师: 所 在 学 院: 时 间: 2017 年 6 月 第 1 页 共 38 页摘要随着计算机技术的发展,嵌入式系统已成为计算机应用领域的一个重要组成部分。随着网络技术与嵌入式技术的结合,Internet 网络体系结构中应用层的各种协议,在嵌入式系统设备中有了实现的可能。本文就是在嵌入式系统设备上实现 HTTP1.0 协议的部分功能。本论文从嵌入式系统的设计与开发入手,到在嵌入式系统硬件设备上,实现基于 Linux 操作系统上实现 HTTP 协议的服务端功能程序。整个发生过程如下: 首先,嵌入式系统的硬件设备的选择与实现。在众多的嵌入式 CPU 中,考虑到实现HTTP 协议的服务端功能程序,对 CPU 的性能要求不是很高,最终选择了性价比较高的 SAMSUNG 公司的基于 ARM7TDMI 的 S3C44B0X 一款 CPU 芯片。以太网控制芯片为 RTL8019AS。博创科技公司开发的一款实验箱恰好恰符合这种要求。其次,嵌入式软件系统的实现。对于嵌入式系统操作系统的选择,由于硬件功能的限制,通过比较几个常用的嵌入式操作系统,最后选择了 linux 操作系统。在该系统下,选用 C 程序设计语言,利用 linux 操作系统地系统函数库和 SOCKET 编程技术,实现 http 服务端的功能。最后,该项目的实际意义主要在于两个方面的应用,一个是监视功能,用于在服务器端进行某项监视任务,使在客户端的浏览器中的显示监视的信息,这样能帮助用户主动获取信息。另一个是控制仪器设备。用户可以通过执行 CGI 程序或脚本语言,通过 Internet 获得交互式信息,对其进行远程控制。 关键词:嵌入式系统; 超文本传输协议; Linux; 第 2 页 共 38 页AbstractWith the development of the computer technology, embedded system technology has become an important part of the computer application. After the computer network technology and the embedded system technology combines, some protocols of the application layer in the internet network architecture can be translated into programs that run on the embedded devices. The thesis presents the design and implementation of part of the HTTP1.0 protocol based on embedded hardware and operation system. The server processes the request, returns a header containing a status code and either a file or an HTML document attached after the header. The thesis introduces the procedure of the design and development of the embedded system, which the server function program of the HTTP protocol realizes based on embedded devices system and CLinux OS platforms .The entire process goes as follows. First, the thesis introduces the choice and the realization of the embedded system hardware. Because the performance and complexion of the program of the HTTP server function is not too much, I chose Samsungs S3C44B0X CPU that is based on ARM7TDMI among the many embedded CPU and the Ethernet controller chip of the system is RTL8019AS.fortunately, UP-NETARM3000 experiment system based on ARM7 platform meets the need, which is made by universal pioneering Technology Co., LTD. Second, the embedded system realizes. Considering the limited performance of the embedded system hardware, I finally choose CLinux OS as the software platform by comparing several operation systems of current embedded system. I choose C programming language to program by use of the operation system functions and socket technology offered by CLinux in order to realize the HTTP server function. Finally, the application of the project consists of two primary parts. One is monitoring function, that is, the information monitored by the HTTP server can be sent to the client that gets it by the browser; the other is remote controlling appliances and devices. Users can control them remotely by running CGI programs or scripts language programs through the internet. 第 3 页 共 38 页Key words: Embedded system; HTTP protocol,; Linux目录第一章 嵌入式的基础简介.11.1 嵌入式系统的历史、现状与发展.11.2 嵌入式系统概述.21.3 Linux 的主要特性.41.4 嵌入式 Web 服务器.5第二章 HTTP 协议简介.72.1 HTTP 协议基础.72.2 HTTP 协议的运作过程.82.3 HTTP 协议的工作模式及特点.10 第三章 HTTP 设计思想.113.1 系统总体设计.113.1.1 系统的结构图说明.113.1.2 功能分配.123.2 详细设计.123.2.1 主程序设计.123.2.2 客户请求连接处理模块设计.143.2.3 客户请求解析处理模块设计.153.2.4 发送 HTTP 协议数据头模块设计.163.3 程序设计需求分析.16第四章 程序实现.194.1 主程序实现的主要思想.194.2 几个主要函数的名称及相关参数说明.204.3 系统程序(函数)源码.21第五章 嵌入式 Web 服务器的实现.第 4 页 共 38 页.225.1 Web 服务器的模块框图.225.2 介绍.。.22第六章 测试与固化.246.1 测试.246.2 程序的固化阶段.24第七章 现实意义.26参考文献.29附录.30第 0 页 共 38 页第一章 嵌入式的基础简介近年来嵌入式技术作为计算机科学与技术发展的一个新的分支,发展非常迅速,应用的前景被业内人士非常看好。随着 Internet 的普及,网络在人们的日常生活和工作中扮演着越来越重要的角色, 已经成为人们生活和工作中不可缺少的部分。1 随着嵌入式技术和 Internet 技术的发展与结合,嵌入式系统在互联网方面的应用越来越广泛,由于嵌入式系统带有网络接口,把嵌入式系统设备挂接互联网上,可以实现嵌入式设备系统的数据通过 Internet 实现共享, 这样对于远端的许多用户就可以通过浏览器以网页的形式和嵌入式设备进行通讯, 从而实现各典型的基于 X86 的 CPU的微型计算机和 Linux 操作系统下的 web 服务器技术已经成熟。但由于 Linux 内核庞大,而嵌入式系统的硬件资源(CPU 和存储器)远远比不上微型计算机,因此,要把Linux 操作系统装入有限的内存,就要对它进行裁剪。对于内存资源很宝贵的嵌入式系统来,设计一个嵌入式 HTTP 网络服务器,用浏览器进行访问控制,在嵌入式网络设备中的应用将是非常有前景的。为了实现嵌入式 HTTP 服务端的功能,采用基于ARM7TDMI 内核的 S3C44B0X CPU 芯片,操作系统选用 CLinux 来作为嵌入式操作系统,利用 CLinux 提供的库函数及 SOCKET 编程技术,依据采用软件工程学的原理,来指导开发过程。目前用于 Web 页面访问的应用都是基于 HTTP(Hypertext Transfer Protocol)应用协议的,它对于设计 Web 浏览器等应用软件是必须需的。我们在嵌入式产品无线PDA(personal Digital Assistant)中为了实现嵌入式的浏览器,自行设计和实现了HTTP/1.1 协议,为无线 PDA 提供访问 Web 页面提供了基本的支持。在设计和实现过程中,我们应用了 HTTP/1.1 不同于 HTTP/1.0 之处,如可持续连接、缓存等减少了响应时间,改善了无线网络带宽窄而带来的延时,同时也提高了嵌入式设备的资源利用,为嵌入式设备提供了较好的实现方案。该项目的实际意义包括以下两个方面的应用,一个是监视功能,用于在服务器端进行某项监视任务,使在客户端的浏览器中的显示监控的信息。它能帮助用户主动获取信息。另一个是控制仪器设备。用户可以通过普通的 HTML 页面,在任何时间、任何地方浏览电器设备的运行状态,并可对其进行远程控制,特别是通过 Internet 获得交互式信息。1.1 嵌入式系统的历史、现状与发展20 多年前,芬兰赫尔辛基大学的一名名为 Linus Torvalds 的计算机业余爱好者设第 1 页 共 38 页计了一个可以代替 Minix 的操作系统,这个系统不但可以运行在当时最为流行的 x86平台的处理器,并且还具有 Unix 所能实现的一切功能,这就是早期 Linux 的前身。1991 年的 9 月,它将第一个 Linux 版本发布在网络上,并在十个月以后发布了第二个版本,同时,借助于网络,越来越多的计算机爱好者也加入了新版本开发的行列,它们慢慢的成为了 Linux 强大的技术支持力量,也就是当今著名的 Linux 社区。到现在,Linux 已经发行了超过了 30 个版本,并且每三个月就会更新一个新版本,成为全世界最具影响力的操作系统之一。现代社会信息化,智能化,网络化发展迅速,嵌入式系统的发展空间也越来越大。从二十世纪九十年代起,嵌入式技术全面展开,发展到现在已成为通信,工业和消费类产品不可转变的共同发展方向。二十一世纪是信息化的社会,互联网的发展不可抑制,网络化是提高生产效率,保证产品质量,降低人工成本的有效方法。在工业工程控制,数字机床,电力系统,电网安全,石油化工系统等方面的发展,就离不开嵌入式系统,从老式的低端的八位单片机到如今以 32 位,64 位处理器为核心的工业控制设备,足以让我们明白目前工业设备的发展是以嵌入式系统的发展为前提的。尤其在数控技术中,嵌入式 LINUX 数控系统完成了系统人机界面的开发,利用 C 语言完成了控制层面的开发。现在一些大型商场中的自动售货机早已进入人们的视野,居民出行方便省钱的公交卡,随处可见的智能 ATM 终端,各种超市商场的会员卡,这些卡伴随着嵌入式系统的发展在人们生活中发挥着越来越重要的作用,一卡在手走遍天下已不是遥不可及的梦想。嵌入式系统的市场是巨大的,嵌入式系统的应用几乎无处不在:移动通信、数字办公、家电应用、交通运输、互动娱乐等无不有它的踪影。体积小、可靠性高、功能强、灵活方便等嵌入控制器独有的特点与优势,使其被广泛运用到教育、国防、工农业、科学研究以及日常生活等各个领域,对各行各业的技术进步、自动化发展、产品更换、提高生产率等方面起到了十分重要的促进作用。 嵌入式系统作为人类青睐的系统工具,要想不被淘汰,只有吸引人们的目光,不断进步,给人类生活带来便利,打开新的消费市场,适应快速发展的社会状况。近几年我国对物联网行业发展的大力支持和相关产业发展的不断推动,使得具有高度智能化的电子产品的应用范围也因此而不断的扩大,从而使得更多的嵌入式产品也不断的进入到了我们日常的生产生活之中,这就标志着嵌入式系统也进入到了飞速发展的时期,其应用的规模也随之不断的扩大、在此种背景下,本文首先对当前我国各行业对嵌入式系统的概念及应用情况进行简单的介绍和讲解,然后对嵌入式系统未来的发展趋势进行研究,进而了解嵌入式系统在我国各行业的深入应用。第 2 页 共 38 页1.2 嵌入式系统概述什么是嵌入式系统嵌入式系统本身的定义比较模糊,小到、手机、智能、电子仪表等微型数字化产品,大到数字家电、车载卫星定位器以及一些工业控制设备等都可以称为嵌入式系统。根据国际电气和电子工程师协会的定义嵌入式系统是“用于控制、监视或者、辅助操作机器和设备的装置” ,国内一般定义为“以应用为中心、以计算机技术为基础、软件硬件可裁剪,功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 ”嵌入式系统是电脑软件与硬件的综合体。也可以涵盖机械或其它的附属装置。硬件包括处理器微处理器、存储器及外设器件和拍端口、图形控制器等。软件部分包括操作系统软件要求实时和多任务操作和应用程序编程。这种系统具有软件代码小,高度智能化,响应速度快等特点,特别适合于要求实时的和多任务的体系。有时设计人员把这两种软件组合在一起。应用程序控制着系统的运作和行为而操作系统控制着应用程序编程与硬件的交互作用。整个综合体设计的目的在于满足某种特殊功能。可以认为凡是带有微处理器的专用软硬件系统都可以称为嵌入式系统。图 1-1 HTTP/1.1 协议的实现框架HTTP 请求解析传递参数(HOST、PORTFORMURLFORM 等)形成 HTTP 待发送数据建立基于 socket 的网络连接发出 HTTP 请求,接收来自 web 服务器的数据解析接收的 HTTP 数据并进行相应的处理结束第 3 页 共 38 页国际电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)曾给出了明确的定义:“用于控制、监视或者辅助机器和设备操作的装置”(Devices Used to Control,Monitor or Assist the Operation of Equipment,Machinery or Plants)。但随着技术的发展,当前则普遍认为其定义应为:依附计算机相关技术作为核心技术,重在应用,软件与硬件可以根据需要裁减,灵活的适应系统对体积、功耗,成本与可靠性的要求。一般来讲,嵌入式系统由硬件层、中间层、软件层三个方面组成,而被控对象或者系统的执行机构主要接收系统发来的控制指令,完成所规定的任务,最终实现嵌入式系统所预定的工作。 作为计算机系统技术的分支,嵌入式技术发展非常迅速,嵌入式控制器的应用几乎无处不在:手持终端设备、智能家电、汽车电子等都能找到它的踪迹。由于其出色的性能,灵活的应用方式,以及体积功耗理想等特点,其对当今社会生产生活产生的影响是不可估量的。1.3 Linux 的主要特性 完全自由免费到目前为止,Linux 仍然是一种绝对免费的开放自由的操作系统,所有的使用者都可以通过其官方网站方便的下载获得其源码。并可在没有获得许可的情况下任意的修改其源码。这是其它操作系统所不可想象的。当然,也正是由于这一优势,来自全球各地的数以万计的程序员、操作系统爱好者参加了对 Linux 内核的修改、编写与设计工作,程序爱好者可以根据自己的兴趣和灵感对其进行修改。这不但让 Linux 的内核吸收了无数程序员大量的的精华,还避免了版权等诸多纷争风险的存在。完全兼容 POSIX 标准由于其支持 POSIX 标准,这使得用户可以在 Linux 下通过相应的模拟器运行其它操作系统下开发的程序,如 DOS、Windows 的程序。这为许多用户从 Windows 操作系统过渡到 Linux 操作系统提供了保障。当许多使用者在考虑 Linux 操作系统时,就不必担心早先在 Windows 操作系统下开发过的程序是否能在 Linux 操作系统下正常运行了,这也是 Linux 操作系统优势所在。 多用户、多任务Linux 操作系统的另外一个特点就是对多用户的支持,通常不同的用户对于自己所使用的文件设备会有特殊的操作权利,为了保证各用户之间在使用上互不影响,Linux 操作系统采用了多用户的设计模式。多任务则是现在计算机操作系统的最重要的一个特点,Linux 操作系统可以使多个应用程序同时运行而相互之间没有影响。 第 4 页 共 38 页良好的界面Linux 操作系统不但带有字符界面而且还具有图形界面。在字符界面下,用户可以通过输入相应的操作指令对计算机操作。它还同时提供了具有与 Windows 操 作系统的图形界面非常相似的 X-Window 图形界面操作系统,用户除使用键盘外,还可以使用鼠标对计算机实时操作。由于在 X-Window 系统环境中的操作就和在 Windows 操作系统中进行操作非常相似,因此可以说 X-Window 操作系统是一个 Linux 版的Windows 操作系统。 丰富的网络功能由于 Unix 操作系统是在互联网的基础上发展而来的,作为其继承者, Linux 操作系统同样具有强大的网络功能。它的网络功能与其系统内核联系非常紧密,因此,在网络功能方面,Linux 操作系统明显强于其它的操作系统。在 Linux 操作系统中,用户可以轻松实现对网页的浏览、传输各类文件、以及远程登陆计算机等网络功能。另外基于其强大的网络功能,Linux 操作系统通常用来作为服务器提供 WWW、FTP、E-Mail 等服务。 高安全、可靠、稳定性能Linux 操作系统采取了许多安全技术第二章 系统涉及到的关键技术措施,其中主要包括对用户读写权限控制、审核跟踪、严格的用户授权机制,这些措施都为系统的安全提供了必要地保障。许多情况下,由于其出色的稳定性,Linux 操作系统被作为网络服务器使用。 支持多种平台目前,Linux 操作系统可以运行非常多的硬件平台之上,例如 x86、ARM,AVR 等架构的处理器。另外 Linux 还是一种嵌入式操作系统,它可以应用在手机、数码相机、电视机顶盒、游戏机等数码设备上。2001 年 1 月开始发布的 Linux2.4 版内核系统已经实现了对 Intel 64 位芯片架构的支持。同时 Linux 操作系统还对多处理器具有很好的支持。当系统采用多个处理器同时工作时,其性能将大大的提高。1.4 嵌入式 Web 服务器通俗来讲,Web 服务器可以认为是一种存在于因特网上某种特定类型的计算机应用程序。当有 Web 浏览器 (客户端)连接到 Web 服务器 IP 地址并请求访问文件时,Web 服务器便会把存放在本地计算机上的相关文件发送至来访的浏览器,并通过附带信息的方式告知浏览器如何浏览相关文件。目前,Web 服务器进行文件通信时使用的是超文本传输协议(Hyper Text Transfer Protocol, HTTP)。因此,也可称其为 HTTP 服第 5 页 共 38 页务器。除了存储被访问的数据文件之外,Web 服务器还可以与客户端进行交互,并运行相关的脚本程序。这些程序或者脚本一般称之为通用网关接口(Common Cateway Interface,CGI)。Web 服务器可驻留于各种类型的计算机,从常见的 PC 机到巨型的 UNIX 网络服务器,以及其它各种类型的计算机。但在嵌入式系统中,由于资源有限,一般使用体积较小的 Web 服务器,其中多为单任务服务器,例如 Boa。系统中 Web 服务器采用的就是 Boa。通常是在远程机器上,负责对浏览器页面请求作出响应,返回 HTML 编码或类似的数据流。通俗的讲,Web 服务器传送(serves) 页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法 (methods)。确切一点,你可以说:Web 服务器专门处理 HTTP 请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves) 商业逻辑 (business logic)。 随着 Internet 技术的兴起,在嵌入式设备的管理与交互中,基于 Web 方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的 B/S 结构,即在嵌入式设备上运行一个支持脚本或 CGI 功能的 Web 服务器,能够生成动态页面,在用户端只需要通过 Web 浏览器就可以对嵌入式设备进行管理和监控,非常方便实用。第 6 页 共 38 页第二章 HTTP 协议简介2.1 HTTP 协议基础Internet 使用的基本协议是 TCP/IP 协议,在 TCP/IP 协议模型最上层的是应用层,它包含所有高层的协议。高层协议有:文件传输协议 FTP、电子邮件传输协议 SMTP、域名系统服务 DNS、网络新闻传输协议 NNTP 和 HTTP 协议等。2 HTTP(Hypertext Transfer Protocol)协议,即:超文本传输协议,是用于 WWW 服务器与本地浏览器进行超文本传输传送的协议。它可以使浏览器与 Web 服务器通过互联网,更加高效使传输网络信息,并使之成为标准化。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分以及哪部分内容首先显示(如文本先于图形) 等。 由于 HTTP 协议是基于请求/响应范式的(相当于客户机/ 服务器)。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号后边是 MIME 信息包括请求修饰符、客户机信息等内容。服务器在接收到请求后,给予相应的响应信息。其格式为:一个状态行(包括信息的协议版本号、一个成功或错误的代码) ,后边是 MIME 信息包括服务器信息、实体信息和其他的一些内容。 许多 HTTP 通讯是由一个用户代理初始化的,并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理和服务器之间通过一个单独的连接来完成。在 Internet 上 HTTP 通讯经常发生在 TCP/IP 连接之上。其缺省端口是 TCP 协议的 80 端口,当然,其它的端口也是可以使用的。但这并不预示着 HTTP 协议在 Internet 或其它网络的其它协议之上才能完成。HTTP 只预示着一个可靠的传输。 HTTP 协议的内部操作过程大致如下,在 WWW 中“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即:某个计算机在某个连接中的可能是客户机,而在另一个连接中可能作为服务器。基于 HTTP 协议的客户/ 服务器模式的信息交换过程它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。其实简单说,就是任何服务器除了包括 HTML 文件以外,还有一个 HTTP 协议驻留程序用于响应用户请求。浏览器是 HTTP 协议客户机,当浏览器向服务器发送请求,在浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了 HTTP 请求,此请求被送往由 IP 地址指定的 URL。驻留程序接收到请求后,第 7 页 共 38 页进行必要的操作后回送所要求的文件。在这一过程中,在网络上发送和接收的数据已经被分成一个或多个数据包(packet),每个数据包包括:要传送的数据;控制信息(即告诉网络怎样处理数据包) 。TCP/IP 协议决定了每个数据包的格式。 HTTP 请求和 HTTP 响应都使用头发送有关 HTTP 协议消息的信息。头由一系列行组成,每行都包含名称,然后依次是冒号、空格、值。字段可按任何顺序排列。某些头字段既能用于请求头也能用于响应头,而另一些头字段只能用于其中之一。许多请求头字段都允许客户端指定多个可接受的选项,有时甚至可以对这些选项的首选项进行排名,多个项以逗号分隔。所有请求行后面的内容都是头的一部分。紧接着头之后是一个空行,表示头已结束。Web 服务器可以通过多种方式响应前一个请求。 2.2 HTTP 协议的运作过程当一个或多个中介出现在请求响应链中时,HTTP 协议的运作情况就变得比较复杂。中介由三种:代理(Proxy)、网关(Gateway) 和通道(Tunnel)。一个代理根据 URL 的绝对格式来接受请求,重写全部或部分消息,通过 URL 的标识把已格式化过的请求发送到服务器。网关是一个接收代理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道经常被使用。 简要介绍了 HTTP 协议的宏观运作方式,下面介绍一下 HTTP 协议的内部操作过程。 首先,简单介绍基于 HTTP 协议的客户/服务器模式的信息交换过程,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接。 在 WWW 中, “客户” 与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。WWW 服务器运行时,一直在 TCP80 端口(WWW 的缺省端口 )监听,等待连接的出现。下面,讨论 HTTP 协议下客户/服务器模式中信息交换的实现。 1.建立连接 连接的建立是通过申请套接字(Socket) 实现的。客户打开一个套接字并把它绑定在一个端口上,如果成功,就相当于建立了一个虚拟文件。以后就可以在该虚拟文件上写数据并通过网络向外传送。 2.发送请求 打开一个连接后,客户机把请求消息送到服务器的特定端口上,完成提出请求动第 8 页 共 38 页作。 HTTP/1.0 请求消息的格式为: 请求消息=请求行 (通用信息|请求头|实体头)CRLF实体内容 请求行=方法 请求 URL HTTP 版本号 CRLF 方法=GET|HEAD|POST|扩展方法 URL=协议名称+ 宿主名+目录与文件名 请求行中的方法描述指定资源中应该执行的动作,常用的方法有 GET、HEAD 和 POST。不同的请求对象对应 GET 的结果是不同的,对应关系如下: 对象 GET 的结果 文件 文件的内容 程序 该程序的执行结果 数据库查询 查询结果 HEAD要求服务器查找某对象的元信息,而不是对象本身。 POST从客户机向服务器传送数据,在要求服务器和 CGI 做进一步处理时会用到 POST 方法。POST 主要用于发送 HTML 文本中 FORM 的内容,让 CGI 程序处理。头信息又称为元信息,即信息的信息,利用元信息可以实现有条件的请求或应答。请求头告诉服务器怎样解释本次请求,主要包括用户可以接受的数据类型、压缩方法和语言等。 实体头实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。实体请求或应答对象本身。 3.发送响应 服务器在处理完客户的请求之后,要向客户机发送响应消息。 HTTP/1.0 的响应消息格式如下: 响应消息=状态行(通用信息头|响应头|实体头) CRLF 实体内容 状态行=HTTP 版本号 状态码 原因叙述 状态码表示响应类型 1 保留 2 表示请求成功地接收 3 为完成请求客户需进一步细化请求 第 9 页 共 38 页4 客户错误 5 服务器错误 响应头的信息包括:服务程序名,通知客户请求的 URL 需要认证,请求的资源何时能使用。 4.关闭连接 客户和服务器双方都可以通过关闭套接字来结束 TCP/IP 对话。 2.3 HTTP 协议的工作模式及特点 HTTP 协议是一种用于分布式、合作式的多媒体信息系统的应用层协议,它在 1990 年 WWW 全球信息刚刚起步的时候就得到了应用。HTTP 协议是一种请求/响应协议,在与主机建立连接后,客户以请求方法、URI 和协议版本的形式向服务器发送请求,随后是类 MIME 信息(包括请求修改,客户信息和可能的正文内容) 。服务器用包括消息协议版本和一个成功或错误代码的状态行进行应答,随后也是类 MIME 信息(包括服务器信息,实体维护信息和可能的实体内容) 。HTTP 通信通常发生在 TCP 连接上,虽然 TCP 是面向连接的传输层协议,但 HTTP 本身是一个无连接的协议,其无连接性表现在每一次请求和相应完成后,该连接就自动断开,解决此问题的方法可以通过在网页中加入刷新机制,使网页不断请求连接服务器。HTTP 通信的默认端口是 80,不过其它端口也可以使用。在互联网或其他网络上,这并不妨碍 HTTP 应用在其他协议的顶端。仅仅期望可靠的传输,任何能提供这种保证的协议都可以使用。在基于 HTTP 协议的客户/服务器数据交换时,当 HTTP 请求产生时,就开始一次 HTTP 通信,过程如下:浏览器提取出 URL 中的主机后,向 DNS 发出请求,解析主机名的 IP 地址;DNS 解析地址并将结果返回给浏览器;浏览器向该地址请求建立 TCP 连接; 浏览器发出请求报文; 服务器向浏览器发送响应报文,并将指定数据发送给浏览器; 断开连接。第 10 页 共 38 页第三章 设计思想3.1 系统总体设计通过软件需求分析来确定软件系统开发目标、需求规格。总体设计的任务是解决怎么做,实现将需求规格转换为体系结构并划分程序的模块组成,以及模块间的相互联系。确定系统的数据结构,即组成系统的元素、程序、文件文档等,但是每一个物理元素仍然是黑盒子状态。软件结构反映系统中模块的相互调用关系:顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,最下层的模块完成最具体的功能。当数据流图细化到适当的层次,则可以直接从数据流图映射出软件结构。设计出软件的初步结构以后,应通过模块分解或合并审查,力求降低耦合提高内聚。模块的划分要符合独立性原则。模块接口复杂是软件发生错误的一个主要原因,应该仔细设计模块接口,使得信息传递简单并且和模块的功能一致。详细通讯过程见附录。3.1.1 系统的结构图说明主程序模块客户连接处理分析客户请求协议发送text文件发送jpeg文件发送gif文件发送html文件发送目录信息发送协议数据头第 11 页 共 38 页图 3-1 系统结构图主程序:服务端程序开始运行时,主进程就创建一个套接口,并和主机地址及端口绑定到一起,随后置为被动监听状态,等待客户端连接请求的到来。一旦接收了一个连接,ACCEPT 会返回一个新的套接口描述符,主进程则创建一个新的子进程来处理这个新的连接,这样系统可以同时接受最多 5 个客户端来的请求。建立 TCP 类型SOCKE 在 80 端口进行监听连接请求。接收到连接请求将请求传送给连接处理模块处理。并继续进行监听。3.1.2 功能分配发送当前目录文件列表信息 将服务器当前目录下所有文件的信息发送给客户端信息包括: 文件名、大小、日期。 发送 HTML 类型文件 将客户请求的 HTML 类型文件发送给客户。 发送纯文本文件 将客户请求的纯文本发送给客户。 发送 JPG 图像文件 将客户请求的 JPG 图像文件发送给客户。 发送 GIF 图像文件 将客户请求的 GIF 图像文件发送给客户。 解析客户请求 HTTP 协议头 分析客户的请求包括: 1. 空格处理 2. 解析客户请求命令 3. 解析客户请求的资源名 4. 解析客户请求的资源类型。 第 12 页 共 38 页客户连接处理 解析 Referrer 和 content_length 字段值并调用客户请求解析函数。 发送 HTTP 协议数据头 根据发送文件类型发送相应的 HTTP 协议头信息。33.2 详细设计3.2.1 主程序设计功能说明:系统的总入口也是系统的主要控制函数。分别完成如下功能: 建立环境设置。 设置信号处理方式。 建立侦听 TCP 流方式 SOCKET 并绑定 80 端口。 建立连接侦听及客户连接处理调用主循环。 该系统基于 TCP/ IP 的套接口通信,具体的消息处理遵循 HTTP 协议,服务端程序的工作状态如下图。 设置信号处理句柄进入根目录客户请求处理设置最大连接数5 客户主程序参数处理建立 SOCKET,并绑定到 80 端口监听客户连接第 13 页 共 38 页图 3-3 主程序流程图图 3-2 主进程与线程3.2.2 客户请求连接处理模块设计功能说明 当用户的请求达到 HTTP 服务端程序的时候,通过客户连接处理模块来初步处理客户的连接请求,并将请求信息传递给客户请求解析函数处理。 算法描述: 建立文件描述符读取客户端程序的连接信息获取 Refferer 字段信息获取内容字长字段信息主进程线程 1 线程 2 线程. 线程 5第 14 页 共 38 页调用客户请求解析子程序关闭文件流图 3-4 客户请求连接处理模块 N-S 盒图3.2.3 客户请求解析处理模块设计功能说明 用于解析客户的请求并根据请求信息调用相应的函数进行请求处理。开始对的请求字符串进行处理请求资源在?请求目录?判断请求文件类型送目录信息结束JPEG协议头Image/jpegGIF 协议头:Image/ GifHTML 协议头:Text/ HtmlTEXT 协议头:Text/ Plain 发送index.htmIndex.htm?第 15 页 共 38 页图 3-5 客户请求解析处理模块的流程图3.2.4 发送 HTTP 协议数据头模块设计功能说明:根据客户浏览器请求的不同参数,发送不同的 HTTP 协议头信息。发送成功信息CASE 内容类型t g j h发送纯文本的相应信息发送gif的相应信息发送jpeg的相应信息发送html的相应信息图 3-6 协议数据头模块的 NS 盒图至此,系统的软件设计部分已经完成,下一阶段的工作就是根据系统的详细设计,实现各模块的编程,以及将各个模块组装成一个完整的系统。3.3 程序设计需求分析第 16 页 共 38 页嵌入式系统中服务器的实现方法主要有两种:目标嵌入式系统设备使用嵌入式操作系统和目标嵌入式系统设备不使用操作系统。本课题采用 EOS 的服务端功能的程序实现。4在低端嵌入式设备上实现 HTTP 服务端功能的程序,要根据该系统对 HTTP 服务的功能需求简化 HTTP 协议的一些机制,在资源有限的情况下设计满足需求的嵌入式 HTTP 服务端程序。图 3-7 嵌入式 HTTP 服务端程序的原理需求分析的结果是系统开发的基础,关系到系统开发的整过过程,以及软件的成败和质量。嵌入式系统的特点决定了系统在开发初期的需求分析过程中就要完成的任务在需求分析阶段需要分析客户需求,包括功能需求、数据流图以及系统地数据要求发送 HTTP 服务端相应头从标准输入中接受浏览器的字符初始化网络端口把缓冲区中的字符串标记成 html将从端口接受的字符串送缓冲区发送 html 到客户端浏览器结束第 17 页 共 38 页等。1、功能要求 在嵌入式系统中实现 HTTP(服务端)的程序,在客户端向服务端发出请求,时将服务器当前目录下所有文件的信息发送给客户端信息包括:文件名、大小、日期; 获取指定的文件,并解析文件类型(HTML、TXT、JPG、GIF 等文件) ; 响应客户端程序的要求,析客户的请求将请求信息解析为几个变量包括:请求的命令、请求的文件名、请求的文件类型。 2、系统的数据流分析数据流图(Data Flow Diagram,简称 DFD) 图 3-8 系统数据流图2监听请求客户端浏览器1.1监听请求1.3监听请求1.2监听请求客户端浏览器 I 资源数据事务事务事务事务请求的资源第 18 页 共 38 页、第四章 程序实现4.1 主程序实现的主要思想主进程(HTTP 服务端程序)开始运行时,主进程就创建一个套接口,并和主机地址绑定到一起,随后置为被动监听状态,等待客户端连接请求的到来。一旦接收了一个连接,ACCEPT 会返回一个新的套接口描述符, 5主进程则开辟一个新的子进程来处理这个新的连接,这样系统可以同时接受多个客户端来的请求。 具体如下: int socket (int family ,int type ,int protocol); family:一般为 AF_INET,代表 Internet(TCP/IP)地址族; type:参数指定 socket 的类型: SOCK_STREAM 或 SOCK_DGRAM; protocol:通常赋值 0。该函数用来创建一个套接口, 并返回一个短整数的套接口描述符,可以在后面的程序中调用使用它。 Socket 描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用 Socket 函数时,socket 执行体将建立一个 Socket,实际上“建立一个 Socket”意味着为一个 Socket 数据结构分配存储空间。Socket 执行体为你管理描述符表。 Bind 函数将 socket 与本机上的一个端口相关联,随后可以在该端口监听服务请求。Bind 函数原型为: int bind(int sockfd,struct sockaddr *my_addr, int addrlen); Sockfd 是调用 socket 函数返回的 socket 描述符,my_addr 是一个指向包含有本机IP 地址及端口号等信息的 sockaddr 类型的指针;addrlen 常被设置为 sizeof(struct sockaddr)。Bind()函数在成功被调用时返回 0;出现错误时返回 -1并将 errno 置为相应的错误号。 Listen 函数使 socket 处于被动的监听模式,并为该 socket 建立一个输入数据队第 19 页 共 38 页列,将到达的服务请求保存在此队列中,直到程序处理它们。int listen(int sockfd, int backlog); Sockfd 是 Socket 系统调用返回的 socket 描述符;backlog 指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待 accept()它们。Backlog 对队列中等待服务的请求的数目进行了限制,大多数系统缺省值为 20。如果一个服务请求到来时,输入队列已满,该 socket 将拒绝连接请求,客户将收到一个出错信息。当出现错误时 listen 函数返回-1,并置相应的 errno 错误码。 accept()函数让服务器接收客户的连接请求。在建立好输入队列后,服务器就调用 accept 函数,然后睡眠并等待客户的连接请求。 int accept(int sockfd, void *addr, int *addrlen); sockfd 是被监听的 socket 描述符,addr 通常是一个指向 sockaddr_in 变量的指针,该变量用来存放提出连接请求服务的主机的信息(某台主机从某个端口发出该请求) ;addrten 通常为一个指向值为 sizeof(struct sockaddr_in)的整型指针变量。出现错误时 accept 函数返回-1 并置相应的 errno 值。 当 accept 函数监视的 socket 收到连接请求时,socket 执行体将建立一个新的 socket,执行体将这个新 socket 和请求连接进程的地址联系起来,收到服务请求的初始 socket 仍可以继续在以前的 socket 上监听,同时可以在新的 socket 描述符上进行数据传输操作。 线程:用来处理每个具体请求,线程中主要由几个处理模块组成 :通用函数模块、静态文本处理模块、CGI 模块和出错处理。4.2 几个主要函数的名称及相关参数说明Copy 函数 函数名: int copy(FILE *read_f, FILE *write_f) 参数 1:文件流 FILE 结构指针用于表示读文件流指针。 参数 2:文件流 FILE 结构指针用于表示写文件流指针。 客户连接处理 函数名:int Handle Connect(int fd) 参数:客户连接文件描述字 解析客户请求 函数名:int Parse Cli Req(FILE *file_pointer, char *r) HTTP 参数 1:文件流 FILE 结构指针用于表示客户连接的文件流指针。 第 20 页 共 38 页参数 2:字符串指针待解析的字符串。 发送 HTTP 协议数据头 函数名:int Send Header(FILE *file_pointer , int content_type) 参数 1:文件流 FILE 结构指针用于表示客户连接的文件流指针。用于写入 HTTP 协议数据头信息。 参数 2:信息类型用于确定发送的 HTTP 协议数据头信息。 发送当前目录文件列表信息 函数名:int Handle Directory(FILE *file_pointer, char *name) 参数 1:文件流 FILE 结构指针用于表示客户连接的文件流指针。用于写入目录文件信息数据。 参数 2:目录名表示客户请求的目录信息。 发送 HTML 文件内容 函数名:int Handle HTML(FILE *file_pointer, char *name) 参数 1:文件流 FILE 结构指针用于表示客户连接的文件流指针。用于写入文件信息数据。 参数 2:客户浏览器请求的文件名。 4.3 系统程序(函数)源码由于函数的代码所占篇幅较大,请参照附录里的源程序。第 21 页 共 38 页第五章 嵌入式 Web 服务器的实现5.1Web 服务器的模块框图一个嵌入式服务器基于开发,6主要由如下一些模块组成:初始化模块、侦听模块、请求解析模块、脚本引擎模块、输出模块、命令模块。图 5-1 WEB 服务器的模块框图“初始化模块用于定义变量、设置信号量、创建、将与本地地址和端口绑定,并设置处理侦听状态。侦听模块在接收一个连接请求后,读取用户的请求,进行处理,静态文本带参数的命令l动态 文本初始化侦听客户请求解析客户请求字符串脚本引擎模块命令执行模块输出第 22 页 共 38 页再交给解析模块进行解
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!