嵌入式Web服务器的设计与实现(程序+任务书+说明书+外文翻译+演示文稿)_第1页
嵌入式Web服务器的设计与实现(程序+任务书+说明书+外文翻译+演示文稿)_第2页
嵌入式Web服务器的设计与实现(程序+任务书+说明书+外文翻译+演示文稿)_第3页
嵌入式Web服务器的设计与实现(程序+任务书+说明书+外文翻译+演示文稿)_第4页
嵌入式Web服务器的设计与实现(程序+任务书+说明书+外文翻译+演示文稿)_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式Web服务器的设计与实现摘要Linux操作系统是一个开放源代码的免费操作系统,它不仅有安全、稳定、成本低的特点,而且很少发现有病毒传播。近年来,随着linux操作系统在我国的不断普及,越来越多的服务器、工作站和个人电脑开始使用linux软件。基于linux具有稳定、可靠、安全和强大的网络功能这些优点,本文选择在linux环境下实现一个Web服务器。本文研究了HTTP协议实现了数据的传输,阐述了采用linux套接字编程接口的方法实现HTTP协议的方案,详细分析了客户端和服务器之间的通信过程。本文在linux系统下实现一个Web服务器程序,在局域网内,将此服务器程序在一台计算机上运行,使网内其它计算机访问这台服务器时,实现客户端和服务器以HTTP协议进行请求和响应的功能。此外还编写了Web浏览器。Web服务器实现的全部代码采用linux下的C语言编程,可进一步提高系统运行速度,并且增强了系统的安全性和可靠性。Web浏览器代码是采用C+和Qt的编程,界面设计是用Qt实现的。关键词:嵌入式;linux操作系统;HTTP协议;Web服务器;Socket;Internet;QtiEmbeddedWebserverABSTRACTTheLinuxoperatesystemisafreeoperatesystemwhichopensasourcecode.Notonlyithascharacteristicssuchassafe,stability,andthelowcost,butalsoitseldomdissemiantestheVirus.Inrecentyears,alongwiththeLinuxoperatesysteminourcountrymakeswidelyavailablecontinuously,moreandmoreservers,workstationsandpersonalcomputerstartusingLinuxsoftware.AstheLinuxopertingsystemhasthefunctionofstablereliable,safeandformidablenetwork,torealizeaWebserverintheLinuxenvironmentisthebestchoice.ThispaperintroducesdesignandimplementofWebserverinLinuxoperatingsystem.TheproblemofhowtorealizedatatransmissionbyHTTPprotocolwhichbasedonLinuxisvaluabletoresearch.ThispaperexpoundsrealizingschemeforHTTPprotocol,andgivesoutprotocolcommunicationmodule,wihthemethodofLinuxsocketprogrammingintefface,andanalyzethecommunicationprocessbetweenclientandserver.ThispaperrealizesaWebserverprocedureinLinuxoperatingsysytem.Inthelocalareanetwork,ifthisserverprocedurerunsonacomputer,whichcanrealizesthefunctionthattheclientrequestsandtheserverrespondsbyHTTPagreement,whenothercomputersinthenetvisitit.ThecompletecodeoftheWebserversrealizationusestheClanguageprogramminginLinuxoperatingsystem,whichmayfurtherenhancetherunningrate,andstrengthenedthesecurityandreliabilityofthesystem.ThecodeofWebbrowsersrealizationusesTheC+languageandQt,Keywords:Embedded;Linuxoperatingsystem;HTTPprotocol;Webserver;Socket;ii目录摘要.IABSTRACT.II1绪论.11.1课题的研究意义.11.2国内外研究现状.11.3论文研究内容和主要工作.22相关理论与知识.32.1Linux操作系统简介.32.2Web服务器的概念.32.3WEB服务器基本构架.42.3.1WEB服务器和浏览器.42.3.2WEB页面.62.4WEB系统的基本原理是请求/响应.62.5WEBB/S的通信.72.5.1分析请求.82.5.2构造响应.8iii2.6Linux下Socket网络编程基础知识.92.6.1Socket简介.92.6.2Socket的定义.92.6.3Socket结构体.102.6.4Socket函数库.102.6.5Socket编程的基本过程.112.7HTTP协议.122.7.1HTTPURL.122.7.2HTTP请求.122.7.3HTTP响应.132.7.4HTTP消息报头.133WEB服务器的设计思路与方案.173.1web服务器的模型.173.2web服务器如何工作.173.3web服务器的设计思路.173.3.1web服务器的设计思路.173.3.2web服务器的功能.183.3.3Web服务器的功能模块图.183.4web服务器的设计方案.19iv3.4.1Web服务器的工作流程.193.4.2web服务器的核心设计思想.203.4.3总体设计的关键点.204LINUX下WEB服务器的设计与实现.214.1客户端与服务器建立连接.214.1.1基本概念.214.1.2建立一个Socket.214.1.3定义程序Socket的使用.224.I.4使用配置Sockct.224.1.5连接Socket.234.2客户端和服务器端之间的请求响应过程.244.2.1整体流程分析.244.2.2服务器接受请求.254.2.3服务器处理客户端的请求并作出响应.254.3Linux下Web服务器的运行与应用.295Web服务器的实现.315.1客户端与服务器建立请求.316总结.33v6.1设计内容总结.336.2设计结论.33参考文献.35致谢.37外文文献.38中文翻译.4801绪论1.1课题的研究意义Internet的迅猛发展,传统的Client/server体系结构(客户机/服务器),渐渐的在某些方面显示出它的局限性,Browser/server结构(浏览器/服务器)的出现恰恰弥补了这种缺陷。B/S方式已成为一种时尚,大部分网络应用系统都是以这种B/S方式与网络用户交换信息。B/S的基础是客户端要有一个浏览器程序,服务器端要有一个与之对应的Web服务器。显然,Web服务器在B/S方式下起着决定性的作用,因此,一般互联网站都采用功能强大的通用Web服务器。随着网络各个核心部分业务量的提高,其访问量和数据流量快速增长,处理能力和计算强度也相应增大,使得单一设备根本无法承担,而且许多企业级应用系统的应用请求具有突发性和紧急性的特点,当应用访问急剧上升时,容易造成网络瓶颈。解决这一问题的办法是采用多台嵌入式Web服务器为一个应用服务,集群负载均衡机制就是为解决多个网络设备之间实现合理的业务量分配而提出的。1.2国内外研究现状目前在市场上有20到30种Web应用服务器,每种服务器在实现对象组件支持、分布式计算、部署的速度和易用程度上采取了不同方式。目前市场上主流Web服务器主要有以下几种产品:1Apache,由SUN公司开发的Apache服务器可以运行在包括Linux等多种系统平台之上。Apache支持许多特性,大部分通过编译的模块实现,如很有用的URL重写,定制日志文件以及过滤支持等。2ZeusWebserver3.3.8服务器,Zeus服务器在SMP(SymmetricMultiProcessing的简称,意为对称多处理系统,内有许多紧耦合多处理器,这种系统的最大特点就是共享所有资源)环境下有优秀的可伸缩性,并实现了常见的特性集合,如访问控制、动态内容产生和安全等。3.iPlanetEnterpriseEdition4.1,Netscape公司开发的iPlanet具有现今高性能WEB服务器的特性,如具有很高的可靠性、可用性、可维护性,系统高度可扩展性等特点,相对其它WEB服务器iPlanet还提供更多的JAVA功能。4AOLserver3.3.1,AOL公司开发的AOLserver3.3.1是一个多线程、可升级和扩展的WEB服务器。5.RoxenWebServer2.1.31,在Roxen中可以使用RXML语言生成动态网页内容。RXML是函数形式的服务器端XML脚本语言,它由Roxen服务器解析并执行。6.Jigsaw,它由WWW组织(W3C)开发,W3C组织负责研究和规定网络协议的标准(如HTTP)。它使用JAVA语言开发,是成功的面向对象、功能全面的服务器。因为Jigsaw1不受测试平台的限制,所以Jigsaw是一个具有活力的、拥有无限潜能的优秀WEB服务器。在嵌入式系统的应用中,由于HTMI语言的标准统一性,只要在设备里建立一个微型web服务器,人们就可以使用现有的Web浏览器与该设备进行双向交互、接收或发送信息。它为我们管理、控制和监测各种各样的设备提供了一个很好的途径,只要设备接入了Internet,我们就可以在世界上的任何地方十分方便地控制、操纵那些配备有微型Web服务器的设备。在Internet上为了发布信息,用户必须运行Web服务器程序。但现成的服务器程序有时候不能满足所有人的要求,所以可以动手开发一个自己的Web服务器程序,其功能就可由设计者定制的功能和需求决定了。1.3论文研究内容和主要工作本次设计就是需要完成一个简易的WEB服务器的设计,实现web服务器基本功能:页面访问请求响应、HTML文件的解析以及数据发送。所以在完成设计之前,必须先了解WEB服务器设计的原理与结构。一般来说,Web服务器通常由以下几个部分组成:(1)服务器初始化部分这部分主要完成Web服务器的初始化工作,如建立守护进程、创建TCP套接字、绑定端口、将TCP套接字转换成侦听套接字,进入循环结构,等待接收用户浏览器连接(2)接收客户端请求由于客户端请求以文本行的方式实现,所以服务器一般也以文本行为单位接收(3)解析客户端请求这部分工作比较复杂,需要解析出请求的方法、URL目标、可选的查询信息及表单信息如果请求方法为HEAD,则简单地返回响应首部即可;如果方法是GET,则首先返回响应首部,然后将客户端请求的URL目标文件从服务器磁盘上读出,再发送给客户端。(4)发送响应信息之后,关闭与客户机的连接22相关理论与知识2.1Linux操作系统简介简单点说,Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于可移植操作系统接口和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。同事它能运行一些主要的的Unix工具软件、网络协议和应用程序。它还支持64和32位硬件。Linux是一个性能稳定的多用户网络操作系统,继承了Unix以网络为核心的设计思想。它是由全世界成千上万的程序员设计与实现的。是一个不受任何商品化软件版权制约、全世界都能够自由使用的Unix兼容产品。Linux模块化的设计结构,使它既能在廉价的PC机上实现Unix特性,也能在价格高昂的工作站上运行,具备多任务及多用户能力。Linux系统软件不仅仅包括完整的Linux操作系统,还包括了高级语言编译器、文本编辑器、等应用软件。另外它还包括图形用户界面,就像WindowsNT一样,我们能够使用窗口、菜单和图标进行操作。Linux的优点:可靠、稳定、安全和强大的网络功能。在一些软件的支持下,能够实现WWW、FTP、DHCP、E-mail、DNS等服务,利用iptables/ipchains构建NAT和功能比较全面的防火墙。2.2Web服务器的概念WWW是WorldWideWeb(环球信息网)的缩写,也可以简称为Web,中文名字为“万维网”。WWW(WorldWideWeb)是一种建立在Internet上的全球性的、交互的、动态、多平台、分布式、图形信息系统。它只是建立在Internet上的一种网络服务。它的开发最初是为了在科学家之间共享成果,科学家们可以将科研成果以图文形式方在网上进行共享。它的最基本的概念就是Hypertext(超文本),如果你用过Windows上的任何一种在线帮助系统你就会比较了解它的结构了。它起源于1989年3月,由欧洲量子物理实验室CERN(theEuropeanLaboratoryforParticlePhysics)所发展出来的主从结构分布式超媒体系统。通过万维网,人们只要通过使用简单的方法,就可以很迅速方便地取得丰富的信息资料。由于用户在通过Web浏览器访问信息资源的过程中,无需再关心一些技术性的细节,界面简单容易操作。长期以来,人们只是通过传统的媒体(如电视、报纸、杂志和广播等)获得信息,但随着计算机网络的发展,人们想要获取信息,已不再满足于传统媒体那种单方面传输和获取的方式,而希望有一种主观的选择性。现在,网络上提供各种类别的数据库系统,如文献期刊、产业信息、气象信息、论文检索等等。由于计算机网络的发展,信息的获取变得非常及时、迅速和便捷。到了1993年,WWW的技术有了突破性的进展,它解决了远程信息服务中的文字显示、数据连接以及图像传递的问题,使得3WWW成为Internet上最为流行的信息传播方式。现在,Web服务器成为Internet上最大的计算机群,可以说,Web为Internet的普及迈出了开创性的一步,WWW采用的是客户/服务器结构,其作用是整理和储存各种WWW资源,并响应客户端软件的请求,把客户所需的资源传送到WindowsNT、UNIX或Linux等平台上。Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(businesslogic)。Web服务器(WebServer)Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamicresponse)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServerPages)脚本,servlets,ASP(ActiveServerPages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。要知道,Web服务器的代理模型(delegationmodel)非常简单。当一个请求(request)被送到Web服务器里来时,它只单纯的把请求(request)传递给可以很好的处理请求(request)的程序(译者注:服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端(server-side)程序和返回(程序所产生的)响应(response)的环境,而不会超出职能范围。服务器端(server-side)程序通常具有事务处理(transactionprocessing),数据库连接(databaseconnectivity)和消息(messaging)等功能。2.3WEB服务器基本构架Web应用的基本构架包括浏览器、网络和Web服务器。浏览器向服务器请求Web页,Web页可能包括由浏览器解释执行的客户端脚本,而且可以与浏览器、页内容和页中包含的其他控件(JavaApplet、ActiveX控件和插件等)进行交互。用户向Web页输入信息或通过超级链接导航到其它Web页,与系统进行交互,改变系统的“业务状态”。2.3.1WEB服务器和浏览器WEB是基于请求和响应的系统,它是在C/S(Client/Server)结构的基础上发展而来的。为了实现世界范围内的信息共享和发布,它规范了通讯协议,并规范、强化Client/Server两端的系统功能,WEB为用户在Internet上查看文档提供了一个图形4化的,易于进入的界面,WEB是一种基于超文本传输协议(HypertextTransportPotocol简称HTTP)向计算机传送多媒体信息(如文本、图片、声音、视频、交互式应用程序)的Internet服务。同C/S结构一样,WEB由两部分构成,即WEB服务器端和WEB浏览器端,WEB服务器的主要功能是:创建、管理和维护WEB页面,对浏览器的请求进行应答并返回HTML页,WEB浏览器(Browser)用来观看WEB资源的客户端软件,主要负责请求,解释并显示WEB页,其工作过程见图2.3。Web浏览器通常可以使用流行的IE或者其它的浏览器。服务器端的TCPIP协议是操作系统内嵌的,其信息流符合HTTP协议。服务器中的HTTP引擎用来分析浏览器的请求消息,并根据请求做出相应的动作。这些动作包括向浏览器发送一些静态页面或调用一些应用服务程序。对于服务器中的静态web页面,可以使用一些常用软件如FrontPage等制作,以备Web服务器调用。而服务器中的应用服务程序则用来扩展服务器所提供的服务。从图l中可以看出,微型web服务器的核心就是:HTTP引擎。HTTP协议是一种网络应用层的标准协议,Web浏览器和Web服务器之间的通信都是采用HTTP协议来实现的。因此只要是符合HTTP协议的通讯过程和数据内容,就可以使用浏览器作为客户端进行连接和传递。图2.3Web工作原理图2.3主要过程为:(1)WEB浏览器通过将URL发给WEB服务器请求信息;(2)WEB服务器响应请求,并返回给客户机超文本标记语言(HTML)页面;(3)WEB浏览器对超文本标记语言(HTML)页面进行解释并显示。Web浏览器Web服务器请求服务Index.htm.Internet或Intranet服务器客户机52.3.2WEB页面WEB页面是WEB系统实现发布、进行管理的主要对象。WEB页面像一个大的容器,将要发布的文字、图片、声音、动画、视频等多种媒体信息封装到一起,供WEB系统实现发布,进行管理。对于WEB系统而言,在众多的WEB页面中,有一个称为WEB主页的页面,它是访问者浏览WEB系统的起点。每个WEB页面都具有唯一的地址,称为统一资源定位符(URL),URL由存储此页面的计算机名和此页面的确切路径构成。WEB页面是超文本标记语言(HTML)编写的。HTML是一种嵌入式语言,通过在普通文本中嵌入各种标记(TAG),使普通文本具有了超级文本的功能。根据WEB页面的内容,可将WEB页面分为三种类型:静态页面,动态页面,目录列表页面。2.4WEB系统的基本原理是请求/响应客户端,浏览器接受用户输入的网页地址(URL)并进行分析,从而得到网页的文件名字和存放网页的计算机地址以及服务程序的端口号,首先根据计算机地址及端口号与服务器建立连接,然后把网页名称及浏览器本身的有关信息按照一定的格式组织起来,发给服务器,这就是请求。比如用户输入http:/kulin.ts/index.html,从而可知:(1)计算机名称为briup根据这个名字能获知其计算机地址(2)端口号为80(http服务的默认端口号)(3)页面的文件名为index.html浏览器就与briup上端口号为80的服务程序建立连接,并把类似下面的数据发过(作为服务请求):GET/index.htmHTTP/1.1Accept:image/gif,image/x-xbitmap,application/vnd.ms-powerpoint,*/Accept-Language:chUA-pixels:800*600UA-color:color16UA-OS:WindowsxpUA-CPU:P41.6User-Agent:Mozilla/2.0(compatibleMSIE3.01;WindowXPHost:briupConnection:Keep-Alive其中第一行说明了文件名称(index.html)、请求的类型(GET)及浏览器支持的协议版本(HTTP/1.0)6服务器端接受到请求后,对其进行分析,解析出网页的文件名称及其他信息(比如请求的类型、处理要求等),根据网页的文件名称到磁盘上提取文件内容,把文件内容和一些必要的说明信息打包后发给浏览器,然后断开连接,这就是“响应”。(浏览器接到文件内容后就将其中的内容显示出来了)比如对于文件长度为2559B的index.html来说,可以发送如下数据作为“响应”:HTTP/1.1200OKServer:briup-HttpSvr/1.1Date:WED,20may200612:45:21Content-type:text/htmlContent-length:2559Last-Modified:Sun,22may200614:21:50上述数据分2大部分,第1部分为“头”,其中,第1行是状态行,包括服务器执行的HTTP版本及本次响应的状态码。后4行分别说明了服务器名称、当前日期、数据类型、数据长度、最后修改的日期和时间。第2部分为数据“体”,是“请求”要求传送的数据,它跟在1个空行之后。当然,客户端和服务器之间还可能有一些中间环节,比如代理服务器、网关、“隧道”等,在此我们先不予考虑。2.5WEBB/S的通信要完成Web服务,除了网络通信链路的建立和拆除,之外至少还要有二方面的功能:“分折请求”和“构造响应”。客户端与服务器交换数据之前,首先用TCPIP建立连接,客户端向服务器请求数据,服务器则向客户端响应并提供数据客户端和服务器以HTTP协议进行请求和响应服务器和客户端只能为一次事务处理建立并维持连接,完成一次事务处理后便结束连接每一个客户端向服务器发送请求均以方法(Method)开始,后跟对象的URL客户端一般要在上述信息中补充所采用HTTP协议的版本号,其后跟一个回车换行(CRLF)字符对依据请求情况,浏览器可能在CRLF后加上浏览器按特别的首部格式编码的信息完成后,浏览器给请求加上一个CRLF还可依据请求情况,把一个实体(MIME格式文档)加到整个请求之后一个HTTP方法实际上是一条命令,客户端用它来说明其请求目的,常用的有GET,HEAD和POSTWeb服务器收到请求并解析之后,以一个HTTP响应消息响应客户端的请求这个响应消息通常以HTTP协议版本号开始,后面是三位状态码和一个原因短语(Reasonphrase),其后是一个CRLF,再后是请求的信息(它被服务器以一种特殊的首部格式编码),最后,服务器加上一个CRLF其后还可以有一个可选实体状态码是三位数,它描述了服务器理解和满足请求的情况,原因短语是状态代码的一个简短说明HTTP7协议版本号、状态代码、原因短语一起构成了状态行上述分析不难看出,接收客户端请求、解析客户端请求、响应客户端请求、向客户端回送请求的结果是Web服务器所需完成的主要任务,Web服务器程序代码主要是为了完成这几项任务2.5.1分析请求如前文所述,“请求”的第1行数据是最重要的,它的格式是:方法资源地址HTTP版本号回车换行“方法”主要有3种:GET:要求必须返回一定的内容。有时还必须根据“请求”的要求先对内容做一定的处理(比如解压缩或根据时间进行过滤)。HEAD:处理办法和GET完全相同,但要求只返回“头”,而不可返回任何实质内容(“体”)。POST:用来处理网页的附属内容,比如“注解”、数据回送等。作为简单的服务器,我们只考虑第一行,且只处理GET请求,版本号不予理睬。2.5.2构造响应如前文所述,响应的第1行是状态行,非常重要,格式如下:HTTP版本号状态码状态文字说明回车换行版本号可取HTTP/1.1;状态码是3位数字,根据情况按表2.1所示代码取值。表2.5状态码值代码特征含义举例1开头的2开头的3开头的4开头的5开头的保留未用成功需要进一步处理客户断错误服务器端错误比如200表示处理成功比如400表示“请求”有错,404表示找不到客户指定的文件作为简易的服务器,“响应”可以只返回状态行和文件内容,即送回如下的内容:8HTTP/1.1200OK状态行一个空行文件内容文件内容2.6Linux下Socket网络编程基础知识本文所设计的Web服务器是在Linux操作系统下的Socket编程实现,所用的函数均来自Linux下的Socket函数库。客户端和服务器的连接也是用Socket套接字来实现的。所以,Socket网络编程是设计的基础。2.6.1Socket简介二十世纪八十年代初,美国国防部高级研究计划署让加利福尼亚大学在UNIX操作系统下实现TCP/IP协议TCP/IP很快被集成到UNIX中,同时出现了许多成熟的TCPrIP应用程序接口(API)这个API成为Socket接口。今天,Socket接口是TCPfIP网络最为通用的API,也是在Internet.上进行应用开发最为通用的APILu-ul。Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输、接收的信息都通过这个Socket接口来实现,在应用开发中就像使用文件句柄一样,可以对Socket语句进行读、写操作,我们将Socket翻译为套接字。2.6.2Socket的定义网络的Socket数据传输是一种特殊的I/OSocker也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用-Socket()该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种形式流式Socket-S(X:K_STREAM和数据报式Socket_SOCKDGRAM。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket对应于无连接的UDPSocket务应用。2.6.3Socket结构体1套接字结构structsockaddr_inshortintsin_family:/地址类型AF_XXXAF_UNIX,AF_INET和AF_NS)unsipedshortintsin_port;/16位端口号structin_addrsin_addr;/32位IP地址charsin_zero8l:/保留9/端口号以及Intcmet地址使用的是网络字节顺序,需要通过函数htons转换用这个数据结构可以轻松处理套接字地址的摹本元素。注意sinzero(它被加入到这个结构,并且长度和structsockaddr一样)应该使用函数bzer()或memset()来全部置零。同时,这一重要的字节,一个指向scekaddr_in结构体的指针也可以被指向结构体sockaddr并且代替它。这样的话即使Sbocket()想要的是srructsockaddr*,你仍然可以使用structsackaddr_in,并且在最后转换。同时,注意sin_family和structsockaddr中的sin_family-致并能够设置为“AFINET”。最后,sin_port和sin_addr必须是网络字节顺序(NetworkByte()ader)2主机结构structhostentchar*h_name:/主机的正式名称char*h_aliases:/类别列表inth_addrtype:/主机地址类型:AFXXXinth_length:/主机地址长度:4字节(32位)char*h_addr_list:/主机IP地址列表,网络字节顺序#defineh_addrh_addr_list0/h_addr是h_addr_list中的第一地址2.6.4Socket函数库(l)套接字函数:intsocket(intdomain,inttype,intprotocol)函数socket创建一个套接字描述符,如果失败返回nbsp;-l。domain为地址类型AFXXX,type为套接字类型,SOCK_STREAM(TCP),SOCK_DGRAM(UDP),SOCK_RAW(IP、ICMP);protocol指定协议,0为默认模式。(2)绑定函数:intbind(intsockfd,structsockaddr*hostaddr,intaddrlen)函数bind将本地地址与套接字绑定在一起,成功返回0,失败为-l,并设置全局变量ermo为错误类型EADDRINUSER。此函数的三个参数分别为:1)sockfd为socket调用返回的文件描述符:2)*address是指向包含有本机IP地址及端口号等信息的sockaddr类型的指针,它的类型是structsockaddr_in;3)sin_falnily-般为AF-lNTE;(3)连接函数:intconnect(intsockfd,structsockaddr*servaddr,int_addrlen)函数connect与服务器建立一个连接,成功返回0,失败返回-l。servaddr为远程服务器套接字地址,包括服务器的IP地址和端口号;addlen为地址的长度。(4)接受请求函数:intaccept(intsockfdstructsockaddr*addr,int*addrlen)函数accept从listen的完成连接队列中接收一个连接,如果连接队列为空,则该进程睡眠。(5)监听函数:intlisten(intsockfd,intbacklog)函数listen将一个套接字转换为倾听套接字,执行成功返回0失败为一1。backlog设置请求队列的最大长度。10(6)写入函数:intwrite(intfd,char*len)读取函数:intread(intfd,char*buf,intlen);函数read和write从套接字读和写数据,成功返回数据量大小,否则返回-l。buf指定数据缓冲区,len指定接收或发送的数据量大小。(7)创建子进程函数:pid-tfork(void)在服务器端,一般在由fork()函数生成的子进程来调用数据传输函数,fork()函数是拷贝父进程的内存映象来创建子进程,事实上它返回两个进程控制号。对于父进程它返回子进程ID,对于子进程它返回0。(8)关闭连接函数:intclose(intsockfd)函数close关闭一个套接字描述符,成功返回O,失败为-l。(9)取本机地址函数:structhostent*gethostbyname(constchar*hostname)函数gethostbyname查询指定的域名地址对应的IP地址,返回一个hostent结构的指针,如果不成功返回NULL。(10)字节顺序转换函数:h表示”host,n表示”network”,s表示”short”,l表示”long”。htons()-HosttoNeLworkShort“htonl()-“HosttoNetworkLong“htohs()-NetworktoHostShort“ntom0-“NetworktoHostLong“2.6.5Socket编程的基本过程利用Socket编程,一般按照以下的基本过程:(1)建立一个Socket:(2)定义程序的socket使用:(3)配置Socket;(4)通过Socket传输数据;(5)通过Socket接受数据;(6)关闭Socket。2.7HTTP协议2.7.1HTTPURL掌握HTTP虽然不是必须的,但是如果你知道它的工作原理,那么在学习JSP开发中的某些知识就可以易如反掌了。http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。HTTPURL(URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)11的格式如下:http:/host:portabs_pathhttp表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。2.7.2HTTP请求http请求由三部分组成,分别是:请求行、消息报头、请求正文1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:MethodRequest-URIHTTP-VersionCRLF其中Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。请求方法(所有方法全为大写)有多种,各个方法的解释如下:GET请求获取Request-URI所标识的资源POST在Request-URI所标识的资源后附加新的数据HEAD请求获取由Request-URI所标识的资源的响应消息报头PUT请求服务器存储一个资源,并用Request-URI作为其标识Delete请求服务器删除Request-URI所标识的资源TRACE请求服务器回送收到的请求信息,主要用于测试或诊断CONNECT保留将来使用OPTIONS请求查询服务器的性能,或者查询与资源相关的选项和需求应用举例:GET方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,eg:GET/form.htmlHTTP/1.1(CRLF)POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。2.7.3HTTP响应HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文1、状态行格式如下:HTTP-VersionStatus-CodeReason-PhraseCRLF其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:1xx:指示信息-表示请求已接收,继续处理2xx:成功-表示请求已被成功接收、理解、接受3xx:重定向-要完成请求必须进行更进一步的操作4xx:客户端错误-请求有语法错误或请求无法实现125xx:服务器端错误-服务器未能实现合法的请求常见状态代码、状态描述、说明:200OK/客户端请求成功400BadRequest/客户端请求有语法错误,不能被服务器所理解401Unauthorized/请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用403Forbidden/服务器收到请求,但是拒绝提供服务404NotFound/请求资源不存在,eg:输入了错误的URL500InternalServerError/服务器发生不可预期的错误503ServerUnavailable/服务器当前不能处理客户端的请求,一段时间后,可能恢复正常2.7.4HTTP消息报头HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每一个报头域都是由名字+“:”+空格+值组成,消息报头域的名字是大小写无关的。1、普通报头在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。eg:Cache-Control用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.eg:为了指示IE浏览器(客户端)不要缓存页面,服务器端的JSP程序可以编写如下:response.sehHeader(Cache-Control,no-cache);/response.setHeader(Pragma,no-cache);作用相当于上

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论