




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科生毕业论文(设计)过程管理手册 论文(设计)题目: 构建嵌入式Linux Web动态服务器 目 录内容摘要1关键词11.绪论21.1Linux系统的介绍21.1.1Linux的诞生和发展21.1.2Linux系统构架21.2嵌入式系统21.2.1嵌入式系统介绍21.2.2Web服务器在嵌入式系统的发展31.3课题的提出31.4系统章节安排32.Web服务器系统设计42.1 系统指标42.1.1 系统设计功能42.1.2 关键技术指标42.1.3 可行性分析42.2 服务器模型选择52.2.1 单循环服务器52.2.2 简单并发服务器52.2.3 高级服务器52.2.4I/O复用服务器62.2.5 系统流程73.Web服务器模块实现93.1 服务器参数解析103.1.1 文件配置103.1.2 命令行解析103.2CGI 支持模块113.3URI解析分发功能模块123.4LISTDIR模块143.5接口模块153.5.1 动态动态加载库模块154.服务器系统测试与结论184.1 服务器测试184.1.1 服务器运行环境184.1.2 各功能调试实现184.1.3 课题设计结论204.1.4 系统展望21致谢22参考文献23Abstract24Key Words241构建嵌入式Linux Web动态服务器专业:通信工程 学号:200810801170 学生姓名:陈文斌 指导老师姓名:黄一平【内容摘要】随着Internet和物联网的迅速发展、人们经济条件的改善,嵌入式设备的网络化需求越来越显重要。嵌入式Web服务器的质量以及速度自然要求相当的高,单进程的服务器很难满足人们高质量的生活要求。本文主要研究和实现了基于PC机Linux系统下模拟采用线程池的模块化的嵌入式Web动态服务器。可根据用户需求,通过服务器的配置文件进行模块以及服务器各种参数的动态配置以及Linux下具备的命令行参数配置。不仅可正常显示静态网页还可通过CGI(Common Gateway Interface)动态生成页面,根据用户配置是否listing directory。提供消息转发机制,对于本服务器不支持的python以及PHP服务器将转发至本地进行处理,然后返回服务器。同时还支持Websocket的功能。使用动态库加载模块的方式,方便其他开发人员进行二次开发。【关键词】:Linux;WEB;CGI;动态服务器;线程池1. 绪论随着物联网的发展,嵌入式设备的网络化愈发重要,嵌入式Web服务器的功能、速度质量需要跟上网络化的发展。目前大多数嵌入式系统还孤立于Internet之外,但随着Internet的发展以及Internet技术与信息家电、工业控制技术等结合日益密切,嵌入式设备与Internet的结合将代表着嵌入式技术的真正未来。目前70%以上的服务器是运行于Linux系统下,Linux系统下的Web服务器成熟稳定发展。1本章主要对Linux以及嵌入式作简要介绍。1.1 Linux系统的介绍1.1.1 Linux的诞生和发展Linux操作系统诞生于1991年,目前已经成为主流的操作系统之一。Linux操作系统是UNIX的一种典型的克隆系统,在Linux诞生之后,借助于Internet网络,在全世界计算机爱好者的共同努力下,成为目前使用者最多的一种类似UNIX的操作系统。UNIX操作系统于1969年在Bell实验室诞生,它是美国贝尔实验室的Ken.Thmopson和Dennis Titchie在DEC PEP-7小型计算机系统上可发的一种分时操作系统。虽然Linux操作系统不同于UNIX的源代码,但在外观以及性能上Linux都与UNIX相同或者更好。21.1.2 Linux系统构架Linux系统从应用角度来看,分为内核空间和用户空间两个部分。内核空间是Linux操作系统的主要部分,但是只有内核的操作系统是不能完成用户任务的。丰富并且功能强大的应用程序包是一个操作系统成功的必要条件。Linux的内核主要由5个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。Linux是在Internet飞速发展的时期成长起来的,所以Linux支持多种网络接口和协议。网络接口又分为网络协议和驱动程序,网络协议是一种网络传输的通信标准,而网络驱动则是对硬件设备的驱动程序。Linux支持的网络设备多种多样,几乎目前的所有网络设备都有驱动程序。31.2 嵌入式系统1.2.1 嵌入式系统介绍嵌入式系统从广义讲,是带有微处理器的专用的软硬件系统的统称,是电脑软件与硬件的综合体,它是以应用为中心,以计算机技术为基础,软硬件可裁剪,对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它是由嵌入式设备及系统中的软件所构成的。如今Linux已成功移植成为最热门的嵌入式系统之一。1.2.2 Web服务器在嵌入式系统的发展嵌入式Internet技术随着Web技术的发展,几乎改变了现在的信息表达形式,很多应用都是基于Web技术的,由于HTML语言的标准统一性,只要在嵌入式设备中有一个微型服务器,就可以使用任意一种Web浏览器接收和发送信息。所以如何设计这种特别的Web服务器,如何在嵌入式设备中安置Web服务器,就成了嵌入式Web服务器的发展和研究方向。嵌入式Web服务器技术的特点就是在TCP/IP标准协议的基础上,实现了网络技术和智能仪器的集成,可以远程监测和控制。41.3 课题的提出综上所述,对于嵌入式Web服务器的研究和应用,其意义是重大的。它为我们管理、控制和监测各种各样的设备提供了一个很好的途径。服务器能动态生成页面满足嵌入式设备的监控等功能。5现有的很多嵌入式Web服务器性能稳定,功能比较强大,但很难用于二次开发增加其他功能。因此本次课题的任务和目标是构建嵌入式Web动态服务器,同时预留模块接口可供开发人员进行二次开发。1.4 系统章节安排本论文主要从以下五部分内容展开,具体描述如下:第一部分:绪论。主要介绍课题来源,开发背景及意义等。第二部分:服务器系统总体设计。主要介绍系统指标、嵌入式服务器的各种模型。第三部分:服务器各模块设计与实现。主要详细介绍各个功能模块的设计原理与实现。第四部分:服务器系统测试与结论。主要介绍运行平台、软件要求和各模块实现效果等。第五部分:致谢。主要对在本次课题设计和论文撰写过程中给予帮助的老师、同学和朋友表示感谢。2. Web服务器系统设计本次课题设计是设计能运行于PC机Linux操作系统下的Web动态服务器。可通过修改配置文件或者命令行参数进行服务器常用参数和模块参数的配置。使用面向对象的C+高级编程语言进行编写设计以及动态加载模块的方式,从而更加方便其他的开发人员在此基础做二次开发。2.1 系统指标2.1.1 系统设计功能u 能够访问指定主机的默认静态网页;u 能够正确的通过CGI访问CGI程序动态生成网页;u 能够同时支持GET/POST的请求方法;u 能够提供开发人员进行再次开发;u 可通过配置确定是否Listing Directory;u 可通过配置文件或者命令行参数对服务器进行配置;u 支持WebSocket协议,即时性强;u 支持消息转发机制,对于服务器不支持的请求类型,可转发给系统处理。2.1.2 关键技术指标1) 客户端和服务器端TCP的连接;2) 静态文件以及动态页面的区分;3) CGI程序的处理以及数据的传输;4) HTTP请求方法的提取;5) GET/POST请求方法的处理;6) 自定义扩展接口的处理。2.1.3 可行性分析1) 通过套接字的建立对服务器端和客户端的连接;2) 通过对客户端请求目录提取获得静态或者动态请求;3) 利用IO复用循环服务器建立两个线程分别用于接受客户端连接和处理客户端请求;4) 浏览器的输入触发CGI程序的运行并返回结果;65) 分别对不同的请求方法进行各自的处理;6) 根据配置确定是否显示请求目录内容。2.2 服务器模型选择嵌入式Web服务器模型主要有以下几种:72.2.1 单循环服务器单循环服等待服务器是对于客户端的请求和连接,服务器在处理完毕一个之后再处理另外一个,即进行串行处理客户端请求。该类服务器构架简单,编程容易,但处理速度缓慢,当一个客户端占用服务器时其他客户端请求则无法响应。2.2.2 简单并发服务器与单循环等待服务器不同,并发服务器对客户端的服务请求进行并发的处理。当多个客户端同时发送请求的话,服务器可以同时进行处理。此类并发服务器的难点是如何确定进程池中子进程的数量以为该类服务器需提前构建多个子进程,一旦构建完成则不能进行扩展,不能调节网络负载。2.2.3 高级服务器高级并发服务器主要有一下三种:1、单客户端单进程,统一accept()该类型的并发服务器模型并不预先分叉子进程,而是由主进程统一处理客户端的连接,当客户端的连接请求到来时,临时有函数fork()进程,有子进程处理客户端的请求。该类模型将客户端连接请求和业务处理进行了分离,条理相对比较清晰。但使用fork()进程,每个进程拥有自己独立的空间,占用内存大,消耗资源多。2、单客户端单线程,统一accept()该类型并发服务器是建立一个线程在等待客户端连接,当有客户端到来时,若当前建立线程数小于预定最大线程数则建立线程用于处理客户端请求,否则继续等待。相对于单进程并发服务器,单线程并发服务器速度比较快、占用资源少、数据类型可以共享等。3、单客户端单线程,各线程独自accept()该类型并发服务器是在主进程中建立一个线程,在该线程中创建预定最大线程数,在个线程中分别等待客户端连接请求。也不方便线程扩展。这几种并发服务器有一个比较重大的缺陷,它需要建立多个并行的处理单元。当客户端增加时,随着处理单元的增加,系统的负载会逐渐地转移到并行单元的现场切换上,这在嵌入式系统特别明显。为了降低系统切换的不必要开支,将主要的系统处理能力集中在核心的业务上,需降低并发处理单元的数量,I/O复用服务器正是此类型的。2.2.4 I/O复用服务器IO服用循环服务器在系统开始的时候,建立多个不同工作类型的处理单元,例如处理连接的单元、处理业务的单元等。在客户端的连接到来时,将客户端的连接放到一个状态池中,对所有客户端的连接状态在一个处理单元进行轮询处理。如此降低了系统切换的不必要开支,将系统处理能力集中放在业务处理上。该类型服务器的缺点是结构复杂、编程比较困难。综合以上各类型的服务器模型,最后决定使用I/O复用服务器类型。I/O复用服务器流程图如下图 1:图 1 服务器模型图2.2.5 系统流程本次设计的系统流程从上图 1 可以清晰看出。Web动态服务器是基于TCP/IP协议的,服务器模型的程序设计流程主要分为:81、套接字初始化socket()套接字初始化过程中,根据用户对套接字的需求来确定套接字的选项。这个过程中的函数为socket(),它按照用户定义的网络类型、协议类型和具体的协议标号等参数来定义。系统根据用户的需求生成一个套接字文件描述符供程序中使用。2、套接字与端口绑定bind()套接字与端口绑定过程中,将套接字与一个地址结构进行绑定。绑定之后,在进行网络程序设计的时候,套接字所代表的IP地址和端口地址及协议类型等参数按照绑定值进行操作。3、侦听连接listen()按照一个服务器需要满足多少个客户端的连接请求,而服务器在某个时间仅能处理有限个数的连接请求,所以服务器设置服务器端排队队列的长度。服务器侦听连接会设置这个参数,限制客户端中等待服务器处理连接请求的队列长度。套接字建立到侦听封装在函数int open_listenfd(int port),函数返回建立的套接字文件描述符,端口号为port。 4、客户端连接在套接字侦听完成之后,服务器等待客户端连接,当客户端请求到来时,服务器进行连接然后进行其他的处理。5、收发数据服务器连接客户端之后,从套接字文件描述符中读取数据或者向文件描述符发送数据。接收数据后服务器按照定义的规则进行对数据处理,并将结果返回给客户端。服务器处理完数据之后,将结束与客户端的连接,关闭套接字。本课题的程序设计是创建两个线程thread_do2:pthread_create(&thread_do0, NULL, handle_connect, (void*)&sockfd); pthread_create(&thread_do1, NULL, handle_request, (void*)&globalcontext);thread_do0的线程函数名为handle_connect,传入参数套接字文件描述符sockfd,该线程用于处理客户端的连接,将获得的套接字描述符放入套接字文件描述符集中。线程thread_do1函数名为handle_request,传入参数为globalcontext的引用,globalcontext是用于存储配置文件和命令行参数中服务器的相关参数,在该线程中使用select()函数监视文件描述符集,判断是否存在有效的文件描述符,有则对其进行处理。按照服务器的参数以及客户端请求调用相应模块函数。对其处理完毕之后将该文件描述符设置为-1,用于存储其他接受描述符,同时客户端连接线程数减1。该Web动态服务器的系统主流程设计即以上内容,下面将介绍各子模块的设计实现。3. Web服务器模块实现前面一章已经介绍了本系统的主流程程序设计,主流程只是树的主干,只有主干的树是没有价值意义的,自然要生长出众多的分支。服务器的功能决定了该服务器具有的模块数量,在设计中,几乎每个模块就是用一个类进行设计实现。系统的各功能模块图如下图 2:图 2 系统模块图根据该模块图可知,课题的主要功能模块有服务器监听模块,该模块已包含在系统设计中、参数配置解析模块、URL解析模块(解析完毕进行相应分发)、CGI模块、接口模块。设计的类图如下图 3:图 3 系统设计类图下面将详细介绍各模块内容。3.1 服务器参数解析服务器的参数,如侦听端口、默认连接客户端最大线程数等都需要使用户能对其进行设置。服务器的相关参数可以在配置文件中进行设置,也可以在启动服务器时使用命令行进行设置。3.1.1 文件配置在服务器启动时对该文件内容进行解析,获取各参数,单个参数存储于类Context globalcontext的map容器9map attributes中,而对于模块的参数信息则存储于map容器mapstring,map extensives中。服务器单个参数的形式为变量名=变量值、模块参数形式为模块名变量名1=变量值1 空一行 变量名2=变量值2。3.1.2 命令行解析Linux系统下命令行是其一大特点,运行于Linux操作系统的软件大多要求可以使用命令行参数进行配置。若启动服务器时使用了命令行参数,那么服务器同样先解析配置文件获取服务器参数,然后对命令行解析,命令行中设置的参数会覆盖配置文件中参数值,命令行中没有的则默认使用配置文件中参数。解析命令行使用Linux下getopt_long()函数,该函数可以用短选项进行配置亦可用长选项对其配置。103.2 CGI 支持模块通用网关接口CGI(Common Gateway Interface),一种基于浏览器的输入、在Web服务器上运行的程序方法。CGI脚本使浏览器与用户能交互,为了在数据库中寻找一个名词,提供你写入的评论,或者从一个表单中选择几个条目并且能得到一个明确的回答。CGI脚本是任何运行在Web服务器上的程序。CGI脚本是用下列两种方法使用的:作为一个表单的ACTION或作为一个页中的直接link。CGI脚本有服务器调用,基于浏览器的数据输入。1) 一个URL指向一个CGI脚本。一个CGI脚本的URL能如普通的URL一样在任何地方出现;2) 服务器接收请求,按照那个URL指向的脚本文件(注意文件的位置和扩展名),执行脚本;3) 脚本执行基于输入数据的操作,包括查询数据库、计算数值或调用系统中其他程序;4) 脚本产生某种Web服务器能理解的输出结果;5) 服务器接收来自脚本的输出并且把它传回浏览器,让用户了解结果。执行CGI程序是一个相对比较复杂的设计,本服务器支持CGI的GET和POST方法,下面将介绍GET方法的实现。服务器接收到客户端的请求之后判断请求方法为GET,服务器将对请求uri进行解析,获取请求文件名以及请求参数。服务器将uri中“?”后的请求参数设置为CGI的QUERY_STRING环境变量,并通过环境变量数组environ传递给执行的CGI脚本程序。特殊的,若该CGI请求为ISINDEX查询类型,即请求参数使用“+”进行隔开,那么服务器将这些参数解析存储于指针数组中,并将该参数数组作为命令行参数传递给CGI脚本程序进行执行。而CGI执行的结果为标准输出,这不是我们需要的,因此需要将标准输出绑定到客户端文件描述符,将CGI的执行结果直接返回客户端进行显示。这些工作都是在子进程中完成,CGI执行成功之后不会再返回,这就需要父进程对其进行控制,父进程要等待子进程结束然后返回主程序。CGI请求GET方法程序流程图如下图 4:图 4 CGI 请求GET方法流程图CGI模块是用于支持动态网页生成的功能模块,能处理动态CGI请求,支持perl、shell等脚本程序或者可执行的二进制文件。CGI请求的POST方法与GET方法类似,POST方法能传输的数据量比较大,该方法是直接将浏览器输入数据发送到服务器作为标准输入,其他过程与GET方法一致,这里不再重复。3.3 URI解析分发功能模块应用层协议HTTP是Web的核心,HTTP协议在Web的客户端程序和服务器程序中得以实现,运行在不同的系统上的客户程序和服务器程序,通过交换HTTP消息彼此交流。HTTP协议定义数据格式,使得服务器和客户端通过协议进行数据交流。一个URL有2部分构成:存放该服务器主机名和该对象的路径名。例如,在如下URL中:H/text/index.htmlH是一个主机名,/text/index.html是路径名。Web服务器的HTTP协议请求消息格式为:请求消息 =请求行(通用信息|请求头|实体头)CRLF实体内容请求行 =方法 请求URL HTTP版本号 CRLF方法 =GET|POST|HEAD|扩展方法URL =协议名称+宿主名+目录与文件名HTTP协议常用的请求方法有GET、POST、HEAD。不同的请求对象对应的GET的结果是不同的,如对于文件的GET请求,结果是文件的内容、对于程序的GET请求,结果则是程序执行的结果。POST方法从客户端向服务器传送数据,POST发送的数据服务器接收后对此进行处理。HTTP请求的一个例子如下:GETHttp:/www.baidu,com/cwb/index.htmlHTTP/1.0URL解析的功能是对不同的请求分析之后分发至不同的模块进行处理。URI解析模块的程序设计流程图如下图 5:图 5 URI解析分发流程图在客户端连接之后,服务器收到客户端的HTTP请求,对其进行获取请求头消息后,判断该请求时候是CGI请求,若是则分发给CGI模块进行处理,CGI处理完毕之后将结果返回给客户端。如不是则请求判断时候是直接的静态页面处理,是则直接将结果返回客户端,若不是则请求时一个目录,则判断服务器的配置参数LISTDIR是否为TRUE,是则交给DIR模块处理,将显示目录下的文件名或子目录,否则显示默认的静态文本页面。这里就涉及到一个DIR模块的处理,该模块是listing directory的功能,下面将简要介绍该模块。3.4 LISTDIR模块在Linux系统下一个目录也是一个文件,该目录文件存放了本目录下的普通文件和子目录,包括他们的一下属性。可用opendir(char *path)打开该目录文件,并通过结构体struct stat可以获得目录中文件的属性状态值。通常服务器是不会允许用户浏览到服务器的目录文件的,即当请求是一个目录是会自动返回默认的静态文本。但为了方便,有时候可能会需要显示目录名,尤其是服务器用于资源下载时。因此本课题设计了该模块,并且是可配置的,当LISTDIR为TRUE是则允许显示目录下文件名以,否则此模块功能将关闭。请求时一个目录时,将先浏览该目录下的文件名,若是普通文件则将显示其大小,将该文件名作为超链接名。若是一个目录,则跳过当前目录,是父目录的话则将./作为超链接名,是普通目录则以目录名为超链接名。3.5 接口模块接口是软件开发的一个重要性质,提供适当的接口可是软件重用得到改善,便于软件的二次开发。本次课题的接口可以将各模块生成动态链接库,然后在配置文件中添加相应的模块配置即可增加该模块功能。当进行二次开发时将新增模块编译成库即可。本接口模块还支持Python和PHP脚本语言程序。3.5.1 动态加载库模块动态链接库是程序运行时加载的库,当动态连接安装正确之后,所有的程序都可以使用动态加载库来运行程序。动态链接库是目标文件的集合,目标文件在动态连接库中的组织方式是按照特殊方式形成的。库中函数的地址是相对地址,其真实地址是在调用动态库的程序加载时形成的。生成动态链接库的命令很简单,在编译时添加两个参数选项即可,例如本课题中将CGI模块编译成的动态链接库:g+ -o mod_CGI.so mod_CGI.cc shared fPIC 这样即可生成CGI模块的动态链接库。在编译主程序时需要添加连接动态加载库的选项参数例如编译主程序的方式为:g+ -o Webserver *.cc lpthread ldl rdynamic 动态加载库可以用程序的方法控制库的加载,动态加载库的主要控制函数有dlopen()、dlerror()、dlsym()、dlclose()。函数dlopen(char *filename, int flag)按照用户指定的方式打开动态链接库,参数filename是动态链接库文件名,flag为打开方式,一般为RTLD_LASY,函数返回库的指针。打开动态链接库之后,使用函数dlsym()获得动态连接库中指定函数的指针,然后使用该函数指针进行操作,即调用动态库中的函数。使用完毕之后调用函数dlclose()关闭动态加载库。本模块是服务器启动时,对所有模块进行初始化,将模块函数指针存储于容器中,同时获取了该模块配置的参数location值,在接受到请求之后,根据uri的请求以及模块的location值调用相应的模块进行处理。在模块中调用具体处理数据函数阻塞到数据处理完毕返回。动态加载库模块流程图如下图 6:图 6 动态库加载流程图如此即可依次调用各模块的动态加载库,完成各种功能。并且是用动态加载库的方法可以很方便的在本服务器上做二次开发,只需要将新添加功能编译成动态库,并在配置文件中声明即可实现。本课题的服务器在支持Python脚本语言和PHP时使用的是转发,将请求文件转发至系统的相应程序进行处理,然后返回到服务器,在有服务器返回给客户端。各模块的设计完成之后进行集成最后成为最终产品。4. 服务器系统测试与结论4.1 服务器测试由于本课题设计的是嵌入式Web服务器,因此该服务器不能运行于Windows平台,所有的开发、测试都是在Linux操作系统上完成。4.1.1 服务器运行环境系统平台:Linux Redhat开发环境:eclipse编译器:g+其他要求:安装Django插件,系统支持STL容器,WebSocket要求google18.0.1025.162版本或新浏览器支持。4.1.2 各功能调试实现在符合以上运行环境情况下,在局域网中进行测试。本服务器可以正常稳定运行,并具有各项基本功能,显示目录列表的功能测试如图 7:图 7 目录浏览功能该功能是配置文件LISTDIR为TRUE是的显示目录列表,服务器默认根目录为/var/www。CGI请求功能的测试时使用了BOA的官方测试程序进行测试,功能效果如下图 8:图 8 CGI GET请求实现由图可知,以上是CGI的GET请求方法,并且是ISINDEX查询,参数能正确读取并返回。对WebSocket的支持是本服务器设计的一个扩展,需要google 18.0.1025.162版本或新浏览器的支持。WebSocket是一种全双工的协议,能即时通信。WebSocket的测试如下图 9:图 9 WebSocket功能测试由上图可看出,服务器不断的向浏览器返回信息,实时性很强。4.1.3 课题设计结论经过两个多月的研究设计,系统实现了需求的基本功能:1. 首先启动时能使用Linux系统下最常用的命令行参数(长选项或者短选项)对服务器的常用参数进行配置,命令行参数未配置的按照配置文件进行设置;2. 能正确返回HTTP请求的指定html等静态文本页面;3. 当浏览器请求时一个目录时能根据服务器参数LISTDIR的设置决定是否显示目录下文件名以及子目录名,若LISTDIR是TRUE则显示,不是则返回该请求目录下默认的静态页面;4. 能够通过服务器CGI执行脚本程序,动态的生成页面返回客户端,支持CGI请求的GET和POST方法,满足基本的动态交互页面;5. 同时支持Python和PHP编写的脚本程序,服务器先将脚本程序转发系统处理然后返回服务器,最后由服务器返回客户端;6. 服务器由动态加载库程序可以方便的添加其他需要的功能模块;7. 支持WebSocket的全双工协议实时性强;在设计过程中加深了网络应用层的HTTP协议以及TCP/IP协议、Linux下网络编程进一步加深了解。知道了服务器的几种常用模型,各模型使用与什么样的场合等。熟悉了通用网关接口CGI的知识,几种常用脚本语言的程序编写。这些都是在课题设计的专业知识的收获。在软件设计过程中程序编写固然重要,但是工程概念亦不能忘。每个项目都是一个项目组完成而非一人所为,因此团队之间交流、沟通、合作显得尤为重要。一人计短,二人计长。在设计过程中有遇到不明白的地方要积极向资深工程师请教,与导师进行沟通。当然也要学会自己解决问题的能力,当今的网络技术就是可以利用的科技手段。应当自己先到网络上阅读对其进行理解,这也是Web服务器的伟大贡献。对软件开发的环境要熟悉,例如Linux系统下的常用命令。熟练使用开发工具辅助开发。4.1.4 系统展望本次课题设计实现了Web服务器具有的基本功能,能运行于嵌入式系统Linux上,并且能方便添加功能模块,进行二次开发。但仍有些缺陷,还可以做IP过滤功能等。本人将会继续完善本设计,使之更加轻巧完美,能应用于嵌入式设备网络中,同时使之能方便供其他网络开发人员进行扩展。致谢通过本次毕业设计,我学到了很多东西。了解了软件设计流程,软件项目相关的很多专业知识。这些都将成为我以后工作中一笔重要的精神财富。当然这些离不开我身边的指导我的每一个人。在这毕业设计完成之际,我由衷的感谢在设计期间给予我关心和帮助的老师、同学们。我要感谢毕业设计指导老师黄一平老师,老师以其严谨求实的治学态度、高度的敬业精神、兢兢业业、孜孜以求的工作作风和大胆创新的进取精神对我产生重要影响。感谢在毕业选题的更换上黄老师的理解,在设计过程中老师的关心,并常向我了解设计进度。我还要感谢梁艳老师、黄守麟老师,感谢他们对我的关爱,平时的谆谆教诲,教会我很多做人做事的道理,这些将使我终生受益。感谢学校的同学,感谢他们对我的帮助,帮我代理学校的一些事物,让我得以安心的在公司完成毕业设计,也感谢他们4年的陪伴,这将成为我人生中一段美好的回忆。感谢周立功先生给我一个在公司实习,完成本次毕业设计的机会,为我提供设计的资料、开发工具等。感谢我的导师朱流海工程师、连刘伟工程师、杨子敏工程师的支持,在毕设过程中对我耐心的指导,以及生活上的帮助。感谢所有在我求学道路上陪伴我帮助我的老师、同学和朋友们。我还要感谢我的父母,是他们的辛勤劳作让我能顺利进入大学学习,成为村里的第一名大学生,感谢他们的支持和鼓励,使我能顺利完成学业。在即将完成毕业设计论文之际,特在此对他们帮助和支持表示衷心的感谢。最后对所有评阅此论文的教授、老师表示衷心的感谢!参考文献1 佚名 嵌入式Web服务器预研报告EB/OL./xmphoenix/archive/2011/04/12/2013394.html2 鸟哥 著鸟哥的Linux私房菜基础学习篇M人民邮电出版社,2010,162-2923 宋敬彬孙海滨Linux 网络编程M清华大学出版社,2010,94-291,414-4404 W.Richsrd Stevens著UNIX网络编程M人民邮电出版社,1996,20-575 佚名 嵌入式Web服务器软件构成与工作原理EB/OL./jsfzdd/article/details/62648416 Daniel J.Berlin 著 丁一强 刘瑞红 译精通CGI编程M清华大学出版社,1998,1-257 宋敬彬孙海滨Linux 网络编程M清华大学出版社,2010,414-4408 W.Richsrd Stevens A.Rago著 张亚英 尤晋元译UNIX环境高级编程M人民邮电出版社,2006,437-4989 Stanley B.Lippman Josee Lajoie Barbara E.Moo著 李师贤 蒋爱军译C+ Primer 中文版M人民邮电出版社,2006,263-36310 MTim Jones著 张元章译GNU/LINUX环境编程M清华大学出版社,2010,124-151Build Dynamic Web Server for Embedded LinuxAuthor:Chen Wenbin【Abstract】With the rapid development of Internet, peoples economic conditions improve, embedded device network demands become more and more imp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 难点解析人教版八年级上册物理声现象《声音的特性》章节测评练习题(含答案详解)
- 2025历年监理考试真题及答案
- 湖南电工考试题目及答案
- 难点详解人教版八年级上册物理声现象《声音的特性声的利用》同步测试试题(含答案及解析)
- 考点攻克人教版八年级物理《功和机械能》章节测评试卷(含答案详解)
- 重难点解析人教版八年级上册物理声现象《噪声的危害和控制》重点解析练习题(含答案解析)
- 达标测试人教版八年级上册物理声现象《声音的产生与传播》定向攻克试卷(含答案详解)
- 九年级下册的重要考试题及答案
- 复旦大学mba的考试试题及答案
- 光伏电站项目合作框架协议范本5篇
- 2025年共青团考试题库(附答案)
- 全国数智产业发展研究报告(2024-2025)
- 二维材料物性调控-洞察及研究
- 头颈部鳞癌治疗现状及免疫治疗进展
- 最全浙江行业协会名单
- 访谈提纲格式4篇
- ACUSONX150西门子彩色多普勒超声系统
- 连铸坯中心缺陷控制
- GYB培训全课件(最终版)
- 合伙开饭店协议书的范本
- 大桥墩柱盖梁抱箍施工方案
评论
0/150
提交评论