欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于Linux的嵌入式Web服务器Thttpd的应用研究与实现精品资料.doc

    • 资源ID:96697211       资源大小:238.50KB        全文页数:25页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于Linux的嵌入式Web服务器Thttpd的应用研究与实现精品资料.doc

    Linux论文设计题目:基于Linux的嵌入式Web服务器Thttpd的应用研究与实现 学院: 软件学院 专业班级:Java08-2班 姓名: 饶本刚 学号:200813100233 姓名: 康英 学号:200813100217 目录 第1章 案例设计引言 1.1案例设计目的和意义 1.2 本案例国内外研究现状 1.3 系统设计的实验环境 1.4 系统设计的技术分析第2章 案例设计内容 2.1案例需求分析 2.2案例可行性分析2.3系统功能描述及功能结构图第3章 案例详细设计 3.1 系统模块功能设计 3.2 实验环境的安装与调试 3.3部分关键配置文件及代码分析第4章 案例总结 4.1 系统测试结果和分析 4.2 系统存在的不足 4.3系统展望第1章 案例设计引言随着计算机科技的快速发展,信息共享程度的不断提高, 嵌入式Web服务器已成为嵌入式技术和网络技术结合的产物,是嵌入式技术网络化的一项重要应用。嵌入式Web服务器主要应用在远程监测和控制方面,将Web服务器移植到接入网络的嵌入式设备后,客户端可借助浏览器对远端的嵌入式设备进行监测和控制。它为我们管理、控制和监测各种各样的设备提供了一个很好的途径。但对于一般的管理信息系统或中小型应用系统, 所需的Web服务功能比较简单, 若仍采用大型的通用Web 服务器, 将是一种资源的浪费,在某些专用嵌入式系统内, 由于内存容量有限, 对实时性要求高, 通用的Web 服务器不能适应市场需求。此时, 使用功能相对简单、体积更小、消耗资源更少、可便携的简单嵌入式Web 服务器将更具优势。目前,嵌入式Linux主要有HTTPD、THTTPD和BOA三种WebRemotemeasuringandcontrolHypertexttransferprotocol(http)服务器。与传统的Web应用相比,嵌入式服务器要求代码小,节约空间和成本、实时性好。本论文中设计了一种全新的基于ARMLinux嵌入式操作系统的嵌入式Web服务器。 1.1案例设计目的和意义为了满足当前工业控制和家用电器远程测控的要求,通过比较常用的嵌入式服务器技术并分析了嵌入式服务器的实现原理,设计了一种全新的Web服务器。详细介绍了这种基于ARMLinux嵌入式Web服务器的设计方案,阐述了系统的软硬件设计。针对嵌入式服务器的实际和应用场合,提出了H1TrP协议与动态链接库相结合的解决方案。该Web服务器支持动态链接库,代码小、实时性好。测试结果表明方案可行、实用。 1.2 本案例国内外研究现状 目前,在世界范围内嵌入式系统带来的工业年产值已超过一万亿美元。据赛迪呼叫中心合作开展的调查显示,目前从事嵌入式开发的软件开发企业已占到百分之三十左右,计划从事开发的企业占到百分之十四。尽管还没有从事该领域开发的公司占到大多数,但我国国内的嵌入式软件市场已处于整体启动阶段,国内嵌入式软件市场未来的发展重点在于对应用范围的拓展,而手持设备、信息家电和工业控制则是近期市场的三大热点。 近年来微电子技术的快速发展,处理器增长速度也随之加快,嵌入式系统领域发生了翻天覆地的变化,特别是网络的普及,嵌入式与互联网成为最热门的技术。现在可以使嵌入式系统具备网络功能,并将它与Internet或企业内联网连接起来,这种特性增长了嵌入式系统多方面的实用性。现在许多嵌入式处理器集成了基本的网络功能,如串行接口必备,还有以太网接口、CAN总线接口等。基于这些趋势,用户开发新嵌入式系统时一般不需要外接网络芯片,而选择具有符合功能要求的嵌入式处理器即可,所需安装的只是物理层的收发器。1.3 系统设计的实验环境 交叉编译器(cross-compiler)是进行交叉平台开发的主要软件工具。它是运行在一种处理器体系结构上,但是可以生成在另一种不同的处理器体系结构上运行的目标代码的编译器。 要建立交叉开发环境,主要需要几个工具包:gcc,glib,binutils,gdb等。一般开发板都提供这些工具,如果不是使用的开发板,在网上也是可以下载到全部软件包的。依次将它们安装在PC上即可。 1.4 系统设计的技术分析嵌入式Web 服务器体系结构:嵌入式Web 服务器为基于3 层B/S结构的瘦Web 服务器。其中,Web 服务器和客户端之间的通信协议采用HTTP1.1,嵌入式实时多任务操作系统提供TCP/IP协议支持, 编程接口为Berkerly Sockets4.3,Web 服务器与数据库服务器间的交互接口为CGI(Common Gateway Interface)。嵌入式Web 服务器实现原理从功能上讲,Web 服务器监听客户端的服务请求, 并根据客户请求的类型提供相应服务。嵌入式Web 服务器是指将Web 服务器引入到现场嵌入式设备中并驻留其中有限的代码空间内。与传统的Web 应用相比简化了系统结构, 在相应的软硬件平台支持下, 利用标准的接口形式和通信协议, 内嵌于嵌入式设备的Web服务器可以向任何接入它所在网络的合法用户提供统一的基于浏览器方式的操作和控制界面。用户端使用Web 浏览器与Web 服务器进行通信。客户端与服务器交换数据之前, 首先用TCP/IP 建立连接, 客户端向服务器请求数据, 服务器在接收到用户端的请求后, 处理用户请求并返回需要的数据。这些数据可来自静态主页和文件, 也可以根据请求动态产生。它是一种请求/响应协议, 使用可靠的TCP 连接, 通常采用端口80。客户端和服务器间是以HTTP协议进行请求和响应。服务器和客户端只能为一次事务处理建立并维持连接, 完成一次事务处理后便结束连接。由此可见, 接收客户端请求、解析客户端请求、响应客户端请求、向客户端回送请求的结果是Web 服务器所需完成的主要任务。第2章 案例设计内容 2.1案例需求分析 嵌入式Web服务器是嵌入式技术和网络技术结合的产物,是嵌入式技术网络化的一项重要应用。嵌入式Web服务器主要应用在远程监测和控制方面,将Web服务器移植到接入网络的嵌入式设备后,客户端可借助浏览器对远端的嵌入式设备进行监测和控制。它为我们管理、控制和监测各种各样的设备提供了一个很好的途径。由于嵌入式设备处理能力和存储容量都有限,传统的服务器无法在上面运行,必须对软硬件进行裁剪,以适应嵌入式应用环境的要求,所以对嵌入式Web服务器的研究和应用,具有重大其意义。 2.2案例可行性分析 Internet Web技术应用于嵌入式系统领域将导致该领域传统运行维护模式的一场变革,将Web服务器植入嵌入式系统后接入Internet,在世界上任何一个地方即可通过网络浏览器从Internet获取该Web服务器发布的系统实时信息,进而实现远程实时控制、调节与维护,并且,这种基于HTML标准化的Web用户界面降低了为不同操作平台而定制人机界面的开发费用、通信费用、人员培训费用和系统升级维护费用。显然,嵌入式系统这种基于Web的远程监控维护方式将克服传统的本地监控维护方式存在的低效率、高成本的缺陷。但是,传统的Web技术方案不能直接用于构造嵌入式系统中的Web服务器。传统Web服务器已具有高运算处理能力和海量存储容量的工作站或PC机为硬件工作平台,以非实时操作系统为软件工作平台,其上运行的是大型复杂的服务器程序,典型的如基于Windows NT 的IIS(Internet Information Server)、基于Unix的Apache Web Server等,服务器的这种高档配置方案对于大量使用8位、16位或32位单片机的嵌入式系统而言是不现实的要求。 基于嵌入式技术的嵌入式Web服务器的出现为解决以上问题开辟了一条崭新途径。嵌入式Web服务器以8位、16位或32位单片机为硬件工作平台,或有嵌入式实时多任务操作系统(RTOS)支持,其上运行小型精简的服务器程序。嵌入式Web服务器的成功开发案例已经体现于通信领域中的路由器、交换机、网络视频监控等产品。近年来如何使用Web浏览器对嵌入式设备进行监控已越来越引起人们的注意。Web浏览器是用户界面的合理选择,可从技术上来讲,浏览器就是Web客户端,则嵌入式系统必须是Web服务器,由于TCP成了一个传输网页工具,而目前用来生成动态网页的软件都是成为大型多用户操作系统设计,则让嵌入式系统能生成动态实时数据的网页问题是有待解决的另一问题。论文中叙述了以基于ARM-Linux嵌入式系统为平台,构建一种嵌入式Web服务器Thttpd,并成功移植了嵌入式SQLite数据库系统,结合网页表单和CGI开发技术,使用户可以通过浏览器远程访问Web Server,并实现和SQLite数据库的动态数据交互。这种嵌入式Web Server方案易于实现,数据管理也非常高效,并成为未来Internet在嵌入式领域发展中的重要方向之一。2.3系统功能描述及功能结构图 1)Thttpd基本功能的实现首先,确保在编译uCLinux内核的make menuconfig这一步,选中busybox中的Thttpd.然后,根据需要,修改源码/user/thttpd下的config.h:#define DEFAULT_PORT   80 /服务器监听端口#define DEFAULT_DIR   /home/httpd /设定服务器根目录#define INDEX_NAME   index.html /设定访问服务器时的默认主页#define AUTH_FILE     passwd /授权用户数据库文件#define CGI_PATTERN   /cgi-bin/*.cgi /CGI的文件名格式#define CGI_PATH       /home/httpd/cgi-bin /CGI的所在目录接下来,建立服务器根目录和文件目录:由于uCLinux的根文件系统为ROM FS, 只读, 因此要在生成文件系统映像之前建立好其中的目录和文件。首先是Web服务器根目录, 再是根目录下的子目录:文件根目录和CGI程序目录。修改/vendor/Samsung/4510B/makefile文件, 在ROMFS_DIRS 列出的目录中增加home/httpd ( 服务器根目录和文件根目录),home/httpd/cgi-bin(CGI程序目录) .最后,将监控系统相关的网页和CGI程序分别放在/vendor/Generic/httpd和/vendor/Generic/httpd/cgi-bin中,就可以随内核编译过程时自动复制到image的相关目录下。在/vendor/Samsung/4510B/rc中添加thttpd实现上电自动执行。2)嵌入式 WEB服务器由网络模块、接口模块和存储模块三个部分组成。网络模块是整个嵌入式 WEB服务器的核心,负责完成服务器的初始化,并且在 80端口等待用户的连接请求。根据用户请求的类型提供相应的服务。此外还要实现电子邮件功能,用来完成自动报警和数据的保存,此外通过选择以太网或者电话线进入 Internet。硬件设计图如下:3)如下图所示,系统有两种网络接入方式:通过PPPOE自动拨号,动态获取IP联入Internet;自定义静态IP连入局域网。第3章 案例详细设计3.1 系统模块功能设计 WEB服务器软件设计从设计角度,则可将嵌入式软件分为 4个模块:网络通讯模块、接口管理模块、人机交互模块和远程加载模块。 3.1.1 以太网接入 Internet的实现    嵌入式 WEB服务器是沟通客户和控制现场的重要桥梁,客户通过认 Web浏览器来实现远程监控的功能。本 WEB服务是以 TCP/IP协议来传输数据,以 HTTP协议来进行客户端与服务器之间的请求和响应,其体系结构如图 4所示。    当客户在界面上进行操作时,如点击复选框或在文本框中输入数据。 Applet根据用户的操作进行响应,从而构造出新的命令字,向嵌入式 WEB服务器发出请求,服务器根据新的命令字驱动控制系统中相应的执行机构,并将新的状态信息和数据信息返回到客户端,客户端解析返回的数据,并进行实时显示。 3.1.2公用电话网接入 Internet的实现    为保证能在无以太网环境的情况下进行通信,系统还采用了串口外接调制解调器通过电话网来实现与远程客户机的通信。网络建立的实现就要用到 PPP协议(Point to Point Protocol点对点协议)。在程序运行的时候先要读取 PPP通信的控制信息,判断是否使用 PPP进行通信,否则默认使用 Ethernet来进行数据的传输。而不是同时开启这两种模式。    由于 PPP通信并不区分客户端和服务器,把负责认证和 IP分配的端认为是服务器,而不需要认证和使用服务器提供 IP的端认为是客户端。设计了 LinkManger类、PPPDaemon类、PPPModemLink类、ModemCommand类、PPPException类,用来实现 PPP通信。其中 LinkManger类:用于管理 PPP连接,启动经由网络接到远端服务器的出站连接,生成一个 PPPDaemon实例用来设置 IP,验证用户名和密码。并实现接收 PPP事务。     PPPModemLink类首先打开一个串口并进行初始化,初始化完成后,把一个串口的对象传递给 PPP,然后创建 ModemCommand对象来控制与调制解调器的串行通信,并通过 SerialPortEvenlistener接口监视 CD以检测调制解调器是否挂起。其定义了 Modem的初始化和复位方法:initializeLink()和 resetModem()。     ModemCommand类负责和 modem具体的串行通信,其分别定义了 sendcommand()、 waitFoResponse()和 receiveCommand()方法。分别用来发送、等待和接收命令。当操作超时,则抛出 DataLinkException;waitforMatc()主要用来供 sendCommand()和 receiveCommand()进行调用,用来判断接收到的字符串是否和匹配字符串一致。当相应操作超时,则抛出 DataLinkException。 3.1.3 嵌入式 Web服务器接口模块的实现    在本系统中为了满足不同工业控制系统的需要,设计有串口、CAN总线接口、Modem接口和 RS-485接口。系统在启动时,从系统的 FLASH中读取 120个字节的初始化信息,并据此来判断是否开启接口,并对所开启的接口进行初始化。由于各个模块的初始化函数己经存在,因此系统初始化时,只要调用相应的函数就够了。PPP已经在网络模块部分介绍,而 RS-485的使用和普通串口的初始化相似,本部分主要介绍 RS-232和 CAN。 3.1.4 RS-232串口驱动函数设计    系统的开发语言是 Java,但 Java本身不提供对串口操作的类,要实现对串口的读写操作,需要用第三方 API函数完成,实际的开发过程中,使用串口通讯协议开发包 comm.jar,它是 J2SE的标准扩展,支持 RS-231串口,并提供了一种与平台无关的串口通信机制。    串口驱动主要实现对串口的读写操作,给应用程序提供发询接收数据的接口。串口正常工作之前,需要进行初始化设置,因此驱动中还有初始化函数。串口的驱动函数串口的驱动函数主要包括: serialInit()用来初始化 UART、serialRead()用来接收字节组、 serialWrite()用来发送字节组。 3.1.5 CAN总线模块     CAN接口在工业控制系统的运用越来越广泛,操作系统提供了对 CAN进行操作的.CanBus类,如要对 CAN进行操作,首先要建立一个 CAN的对象。     CanBus canTest = new CanBus(CanBus.CANBUS0);     由于 DS80C400只提供一个 CAN控制器,所以只能选用 CANBUS0。一旦对象被初始化,就需要设置 CAN的速率。 CAN速率的设置通过设置 Prescaler,TSEGI,TSEGZ和同步段来完成。CAN的计算速率为:CAN波特率=晶振频率/Prescaler+(TSEG1+TSEG2)。    将上述设置完成后,就可以使 CAN控制器使能了:canTest.enableController();要想完成帧的发送和接收,除了在信息中心设置接收和发送模式外,还必须先定义一个 CanFrame的对象即 CanFrame frame =new CanFrame();要接收一个 CAN的帧时,信息是以 CanFrame对象的形式进行接收,并且调用 canTest.receive(frame);如要发送数据,也必须将数据封装层 CanFrame对象的形式进行发送,并且调用 canTest.sendFrame(frame)。 3.1.6人机接口模块    本系统将浏览器/服务器(B/S)结构和客户端/服务器(C/S)结构相结合,客户端仍只需使用易于操作的 Web浏览器,使用该模式不仅统一了用户界面,为用户对系统的查询和操作提供了极大的方便,系统还通过 Java Applet平衡了服务器端与浏览器端的负载状况。    为了对控制对象进行远程操作, Web页面需要给用户提供三个功能:一是现场设备查询,主要是对现场设备的运行状态和采集数据进行查询;二是设备远程控制,提供对运行现场某些参数的修改能力;三是报警 (如高限报警、下限报警等 ),如果现场设备超过设定的报警值,一方面会在网页上发出声音警报。此外还会在后台向指定的邮箱发送报警邮件。 3.1.7 网页的交互方式     Web系统主要采用 HTTP协议。HTTP采用请求/响应的握手方式,每个 HTTP交互都由从客户端发往服务器的请求和从服务器发往客户端的响应组成。HTTP采用 TCP连接,而且该连接状态仅在此次连接中保持,无论服务器或是浏览器都不会记忆上次的连接状态。在设计中首先采用 com.dalsemi.tininet包中的 http类,实现在 80端口等待客户端的请求。其主要实现如下: HTTPServer httpd = new HTTPServer(80); 然后给出将对应的 HTML页面返回到浏览器。 httpd.setIndexPage(“index.html”);初始化结束后,Web服务器进入正常的工作状态以轮询的方式来进行处理。 3.2 实验环境的安装与调试 Linux操作系统支持汇编,C,C+,Basic,Fortran,Pascal,JAVA,PHP等多种编程语言。其下的文本编辑器是Vi和 Emacs,二者均有强大的编辑功能。图形界面的编程用的是Qt或是MiniGUI。利用以上软件,跟在Windows和其他操作系统下的软件编写方法完全相同。编写软件的过程与在其他系统下没有什么不同,不同的地方在与编译和调试。嵌入式中称之为交叉编译和交叉调试。交叉编译就是将在PC上编写好的源代码经过编译、链接生成可以在嵌入式系统上运行的代码,在交叉调试中,调试器和被调试程序分别在PC系统和嵌入式系统中,这是与一般调试不同的地方。交叉调试一般分为软件调试和硬件调试。软件调试插入调试桩的方式进行。典型的是GDB调试器,它分为GdbServer和GdbClient,前者作为调试桩安装在arm的嵌入式系统中,后者驻于本地PC中,二者可通过串口、网口、并口通信。硬件调试一般都使用的是仿真器,常用的如ROMMonitor、ROMEmulator、In-CircuitEmulator和In- CircuitDebugger。硬件调试功能更强大,性能更优秀,但是有的价格昂贵,额外的设备增加了成本。而ARM的JTAG端口实现在CPU内部调试,通过端口发送命令和接收信息。JTAG采用的主要技术为边界扫描技术,它的基本思想就是在靠近芯片的输入输出管脚上增加一个移位寄存器单元。当芯片处于调试状态时候,这些边界扫描寄存器可以将芯片和外围的输入输出隔离开来。通过这些边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制,它提供了一个便捷的方式用于观测和控制所需要调试的芯片。通过JTAG接口可以方便地对目标系统进行测试,同时,还可以实现Flash的编程,是非常受人欢迎的调试方式。为了使系统满足不同任务的需要,有时需要对嵌入式系统中运行的软件进行动态更新。本系统可以直接将新版本的监控软件通过计算机网络传送到现场的嵌入式系统,对原有的软件进行更换,从而实现软件的远程动态更新。利用操作系统自带的 FTP和 Telnet功能,就可以实现系统的远程更新和调试。在系统初始化结束后开始运行,一个线程创建了服务器套接字(Server Socket)来侦听客户端的 FTP和 Telnet连接请求。我们利用 Telnet和 FTP技术,可以实现在 Internet上对嵌入式节点的远程操作,包括程序的运行和停止、程序下载、在线更新、调试、配置等。3.3部分关键配置文件及代码分析1)移植thttpd Web服务器下载并解压$ tar xvzf thttpd-2.25b.tar.gz$ cd thttpd-2.25b2) 交叉编译thttpd rootlocalhost thttpd-2.25b#CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc ./configure -host=arm-linuxrootlocalhost thttpd-2.25b# make LDFLAGS="-static" 3) 安装与配置3.1 拷贝thttpd二进制可执行文件到根文件系统/usr/sbin/目录中tekkamanninjaTekkaman-Ninja thttpd-2.25b$ cp thttpd /home/tekkamanninja/working/nfs/rootfs/usr/sbin/3.2 拷贝thttpd配置文件tekkamanninjaTekkaman-Ninjathttpd-2.25b$ Cp contrib/redhat-rpm/thttpd.conf /home/tekkamanninja/working/nfs/rootfs/etc/你可以在启动文件里增加thttpd的启动命令:/etc/inittab文件中添加thttpd命令:respawn:/usr/sbin/thttpd -C /etc/thttpd.conf即可启动开发板可以自动运行thttpd4 )增加对CGI的支持默认配置下,thttpd不可以运行GCI(特别是动态编译的CGI程序)要想使用CGI支持功能,必须更改thttpd.conf的配置# This section overrides defaultsdir=/home/httpd/html#chroot#屏蔽chroot是为了运行动态编译的CGIuser=httpd# default = nobodylogfile=/var/log/thttpd.logpidfile=/var/run/thttpd.pid# This section _documents_ defaults in effectport=81port参数用于更改端口号(可不改,若还运行了别的WEB服务器,则需用不同端口)# nosymlink# default = !chroot#symlinks# novhostcgipat=/cgi-bin/*声明CGI程序的目录,是以dir为根目录的路径# nothrottles# host=0.0.0.0# charset=iso-8859-15)Web服务器设计嵌人式操作系统是整个嵌人式系统的核心,本系统选择的ARMLinux系统,它支持M P协议,对HTP1.1协议进行了精简。如下图所 示,采用建立TCP类型SOCKET,在80端口进行监听链接请求。接收到链接请求,建立一个处理线程,该方法不仅适合多用户,每个用户还可以同时申请多个文件。在线程处理程序中,客户端就是通过HTTP协议的request包把所要请求的文件,和这次请求的参数传给服务器端,服务器端分析提取它们并执行相关处理,完后把处理结果通过HTTP协议的response包返回客户端。考虑到安全性和嵌入式服务器存储空间要求,只有申请的文件是*.so的才是可执行的文件,用户只需要把控制程序加到*.s。文件中就可以了。 主流程图1.主流程关键实现代码如下:fd s二、ket (AF INET, SOCK STREAM, IPPROTO TCP);sa_in. sinwe family=AF_INET;sa_in_s in-port=htons(8 0 ) ;/s hor tin tinet_pton( AF_INET,p trip,& src) ;sa_ in. sin_ addr=src ;i二bind (fd_s, &sa in, sizeof(struct sockaddr_in);listen(fd s,5);/5 c o nn ec tion r e qu est m axmemset(&sa_in, 0, sizeof(sa_in );len=0;while( 1) fd_ s_i=accept(fd s, &sa_ in, &len)printfif (fd("one connect est/n");_s_i > 0 )_s_i);els epthreadc reate(&pid,N ULL,& function_fd_s_ i,&fd s_i);/创 建 用 户 线 程 else2.1HTTP路径和参数提取通过对httprequestheader的分析,采用read函数实现读取信息存放在数组里,然后进行提取分析的。httprequestheader表达式为:GET_/r/n, 其关键实现函数如下:void*function_fd_s_i(void*P)线程入口函数intfd_s_i=*(int*)P;把ACCEPT函数返回文件描述符的值赋给fd_s_iwhile(1)read(fd_s_i,&buf1,4);/读取httprequestheaderif(buf1=G&&buf2=E&&buf3=T)提取路径和参数3.动态链接库的装载如果申请的是OS文件,调用相关动态链接库,这也是本文核心,其关键实现代码如下:pipe(&fd_p0);建立管道以便和动态链接库实现数据交换buf0=.;动态链接文件必须和Web服务器在同一个目录下ptrlib=dlopen(&bur0,RTLD_LAZY);加载动态链接库if(ptrlib)>0ptrsoman=dlsym(ptrlib,“somain”);找到动态链接库somain地址(*ptrsomain)(ptr_head_block,rd_p1);执行动态链接库和参数传递dlclose(ptrlib);卸载动态链接库write(_d_s_i,“HTTP1.1200OKrnrn”,19);写回客户端Pfdl.fd=fd_p0;Pfdll.events=POLLIN;while(I)i=poll(&pfdl,1,20);if(i<=0)break;i=read(fd_p0,&bur0,1024*64);从动态链接库读取值write(fd_s_i,&buf0,i);notpollbefore,把值显示在浏览器上elsewrite(fd_s_i,“HTTPl.1200OK/r/n/r/n”,19)close(fd_p0);close(fd_p1);第4章 案例总结 4.1 系统测试结果和分析 首先建立好基于S3C2410嵌入式开发环境,把编译好的booloader、ARMLinux内核和ramdisk烧入Flash中,把数据采集和跑马灯应用程序编译成动态链接,编译时一定要用arrmv41-unknown-linux-gcc编译器,一般情况只要我们在PC机平台上编译好,把makefile稍做修改就可以,Web服务器和动态链接库等其他文件必须在同一个目录。运行时先起动我们设计服务器,动态加载相关驱动,在PC机的浏览器上输入嵌入式系统的IP地址,采集的数据就可以动态地在网页上显示,同时可以通过网页上的控制按钮来控制远程设备的工作状态。 4.2 系统存在的不足 web服务器的主要设计技术与实现与传统的web服务器不同,嵌入式web服务器是运行在资源有限的嵌入式系统上,同时嵌入式领域一般仅要求提供必要的信息交互手段,因此,在设计中应尽可能使代码精简高效。尽管如此,该系统也存在不足之处,如从web服务器下载文件是客户端的重要需求,web服务器响应下载请求最简单的办法就是直接将用户请求的数据文件从服务器磁盘上读出然后传给客户端。但有时需要调用一个cGI程序,由cGI程序读取数据,然后经过CGI程序加工后传给客户机。这就带来一个问题,即uRL的文件名是所调用的cGI程序名而不是实际的数据文件名,这为用户在客户端存盘选择文件名带来极大不便。 4.3系统展望嵌入式系统Web server与CGI 技术结合使得对嵌入式系统的管理和使用更为简便直接。基于Web的视频监控系统是目前监控领域发展的主流和方向。文中根据监控系统对数据吞吐量和安全可靠性等各方面的实际要求,结合相关研究的新进展,深入讨论了web服务器在监控系统设计中的应用技巧,并详细做了实现上的阐述。对所有基于嵌入式web技术的监控系统的设计具有非常实际的指导作用。文章首先介绍了嵌入式系统和嵌入式Web服务器的发展前景,应用范围以及当前研究的状况。其次论述了嵌入式系统的开发过程以及选择Linux作为操作系统平台的优越性,详细介绍了嵌入式Linux系统的构建方法和步骤,其中对内核和工具链的制作中用到的一些关键技术进行了说明和分析。最后,通过对几种嵌入式Web服务器的研究和分析,总结了嵌入式Web服务器的开发和设计方法,设计了一个通用的Web服务器,使其具有简单文件传输,数据发布和控制的功能;并对CGI模块的设计提出了一种新的方法,将其作为作为主程序的一个函数进行调用,减少了程序的执行长度,实现一个简单http服务器的基本功能。在此基础上,制作了一个基于嵌入式Web服务器的温控系统。嵌入式web服务器是实现嵌入式系统通过web方式与Internet互联的关键组成部分,直接影响网络应用系统的运行质量与效率,对其进行研究对嵌人式Intemet技术的发展有重要意义。实践证明,在各种基于客户机服务器模式的Intemet应用中使用这种嵌入式web服务器,可节省系统资源,提高运行效率,其功耗低、体积小、性能高、成本低廉、可便携、易于布置实施等特点,在应用环境灵活多变、任务响应实时性强、系统可靠性高等复杂应用领域中必将得到广泛应用,具有良好的发展前景。 附录资料:从 XML 生成可与 Ajax 共同使用的 JSON时下,非常流行使用 JavaScript 代码为数据驱动的 Web 应用程序添加互动性。若能将数据编码成 JavaScript Object Notation(JSON)的格式,您就可以更轻松地通过 JavaScript 语言使用它。通过本文,发掘使用 XSLT V2 从 XML 数据生成 JSON 的几种不同方法。几年前,许多开发人员很看好 XML、XSLT、Extensible HTML (XHTML)和其他一些基于标记的语言。现在,Asynchronous JavaScript and XML(AJAX)成了新的热点,人们又将目光转向了使用 JavaScript 代码的数据驱动的富 Internet 应用程序。但是开发人员是否已经消除了 XML 和这一新技术之间的鸿沟呢?当然,您可以在 Web 客户机中使用 XML 解析器来读取数据,但这种做法会带来两个问题。第一,出于安全方面的原因,XML 数据只能从与此页面相同的那个域中读取。这虽然不是什么大的限制因素,但它的确会引起部署方面的问题,还会阻碍 DHTML 小部件的创建。第二,读取和解析 XML 会非常慢。另一种做法是让服务器执行 XML 的解析工作,方法是设置服务器,使之向浏览器发送以 JavaScript 代码或时下流行的 JavaScript Object Notation(JSON)编码的数据。本文将展示如下三种使用 XSLT V2 语言和 Saxon XSLT V2 处理器从 XML 数据生成 JSON 的技巧: l 简单编码 l 通过函数调用加载数据 l 编码对象 JSON 简介要学习如何将数据编码成 JSON(它只是 JavaScript 的一个子集),最好的方法是从数据开始。清单 1 显示了书籍列表的一个示例 XML 数据集。清单 1. 基本的图形化图书馆<?xml version="1.0" encoding="UTF-8"?><books> <book id="1"> <title>Code Generation in Action</title> <author><first>Jack</first><last>Herrington</last></author> <publisher>Manning</publisher> </book> <book id="2"> <title>PHP Hacks</title> <author><first>Jack</first><last>Herrington</last></author> <publisher>O'Reilly</publisher> </book> <book id="3"> <title>Podcasting Hacks</title> <author><first>Jack</first><last>Herrington</last></author> <publisher>

    注意事项

    本文(基于Linux的嵌入式Web服务器Thttpd的应用研究与实现精品资料.doc)为本站会员(封****n)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开