嵌入式web服务器_第1页
嵌入式web服务器_第2页
嵌入式web服务器_第3页
嵌入式web服务器_第4页
嵌入式web服务器_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式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;QTABSTRACTTHELINUXOPERATESYSTEMISAFREEOPERATESYSTEMWHICHOPENSASOURCECODENOTONLYITHASCHARACTERISTICSSUCHASSAFE,STABILITY,ANDTHELOWCOST,BUTALSOITSELDOMDISSEMIANTESTHEVIRUSINRECENTYEARS,ALONGWITHTHELINUXOPERATESYSTEMINOURCOUNTRYMAKESWIDELYAVAILABLECONTINUOUSLY,MOREANDMORESERVERS,WORKSTATIONSANDPERSONALCOMPUTERSTARTUSINGLINUXSOFTWAREASTHELINUXOPERTINGSYSTEMHASTHEFUNCTIONOFSTABLERELIABLE,SAFEANDFORMIDABLENETWORK,TOREALIZEAWEBSERVERINTHELINUXENVIRONMENTISTHEBESTCHOICETHISPAPERINTRODUCESDESIGNANDIMPLEMENTOFWEBSERVERINLINUXOPERATINGSYSTEMTHEPROBLEMOFHOWTOREALIZEDATATRANSMISSIONBYHTTPPROTOCOLWHICHBASEDONLINUXISVALUABLETORESEARCHTHISPAPEREXPOUNDSREALIZINGSCHEMEFORHTTPPROTOCOL,ANDGIVESOUTPROTOCOLCOMMUNICATIONMODULE,WIHTHEMETHODOFLINUXSOCKETPROGRAMMINGINTEFFACE,ANDANALYZETHECOMMUNICATIONPROCESSBETWEENCLIENTANDSERVERTHISPAPERREALIZESAWEBSERVERPROCEDUREINLINUXOPERATINGSYSYTEMINTHELOCALAREANETWORK,IFTHISSERVERPROCEDURERUNSONACOMPUTER,WHICHCANREALIZESTHEFUNCTIONTHATTHECLIENTREQUESTSANDTHESERVERRESPONDSBYHTTPAGREEMENT,WHENOTHERCOMPUTERSINTHENETVISITITTHECOMPLETECODEOFTHEWEBSERVERSREALIZATIONUSESTHECLANGUAGEPROGRAMMINGINLINUXOPERATINGSYSTEM,WHICHMAYFURTHERENHANCETHERUNNINGRATE,ANDSTRENGTHENEDTHESECURITYANDRELIABILITYOFTHESYSTEMTHECODEOFWEBBROWSERSREALIZATIONUSESTHECLANGUAGEANDQT,KEYWORDSEMBEDDEDLINUXOPERATINGSYSTEMHTTPPROTOCOLWEBSERVERSOCKETINTERNET目录嵌入式WEB服务器I摘要I第一章绪论511课题的研究意义512国内外研究现状513论文研究内容和主要工作6第二章相关理论与知识721LINUX操作系统简介722WEB服务器的概念723WEB服务器基本构架8221WEB服务器和浏览器9222WEB页面1024WEB系统的基本原理是请求/响应1025WEBB/S的通信11251分析请求12252构造响应1326LINUX下SOCKET网络编程基础知识13261SOCKET简介13262SOCKET的定义14263SOCKET结构体14264SOCKET函数库15265SOCKET编程的基本过程1627HTTP协议16271HTTPURL16272HTTP请求16273HTTP响应17274HTTP消息报头18第三章WEB服务器的设计思路和方案2133WEB服务器的设计思路331WEB服务器的设计思路21332WEB服务器的功能22333WEB服务器的功能模块图22341WEB服务器的工作流程23342WEB服务器的核心设计思想25第四章LINUX下WEB服务器的设计与实现2641客户端与服务器建立连接26411基本概念26415连接SOCKET2842客户端和服务器端之间的请求响应过程29422服务器接受请求30第五章WEB服务器的实现3551客户端与服务器建立请求35第六章总结3661设计内容总结3662设计结论37外文文献37DEVELOPWEBAPPLICATIONPROGRAMUSINGASPTHEARCHITECTURETHATMUSTFIRSTESTABLISHWEBAPPLICATIONNOWINAPPLICATIONFREQUENTLYWITHTOHAVETWOTHEARCHITECTUREOFC/SANDTHEARCHITECTUREOFB/S37利用ASP开发WEB应用程序首先必须确立WEB应用的体系结构。目前在应用中常用到的有两种C/S体系结构和B/S体系结构。47参考文献55致谢57第一章绪论11课题的研究意义INTERNET的迅猛发展,传统的CLIENT/SERVER体系结构客户机/服务器,渐渐的在某些方面显示出它的局限性,BROWSER/SERVER结构浏览器/服务器的出现恰恰弥补了这种缺陷。B/S方式已成为一种时尚,大部分网络应用系统都是以这种B/S方式与网络用户交换信息。B/S的基础是客户端要有一个浏览器程序,服务器端要有一个与之对应的WEB服务器。显然,WEB服务器在B/S方式下起着决定性的作用,因此,一般互联网站都采用功能强大的通用WEB服务器。随着网络各个核心部分业务量的提高,其访问量和数据流量快速增长,处理能力和计算强度也相应增大,使得单一设备根本无法承担,而且许多企业级应用系统的应用请求具有突发性和紧急性的特点,当应用访问急剧上升时,容易造成网络瓶颈。解决这一问题的办法是采用多台嵌入式WEB服务器为一个应用服务,集群负载均衡机制就是为解决多个网络设备之间实现合理的业务量分配而提出的。12国内外研究现状目前在市场上有20到30种WEB应用服务器,每种服务器在实现对象组件支持、分布式计算、部署的速度和易用程度上采取了不同方式。目前市场上主流WEB服务器主要有以下几种产品1APACHE,由SUN公司开发的APACHE服务器可以运行在包括LINUX等多种系统平台之上。APACHE支持许多特性,大部分通过编译的模块实现,如很有用的URL重写,定制日志文件以及过滤支持等。2ZEUSWEBSERVER338服务器,ZEUS服务器在SMPSYMMETRICMULTIPROCESSING的简称,意为对称多处理系统,内有许多紧耦合多处理器,这种系统的最大特点就是共享所有资源环境下有优秀的可伸缩性,并实现了常见的特性集合,如访问控制、动态内容产生和安全等。3IPLANETENTERPRISEEDITION41,NETSCAPE公司开发的IPLANET具有现今高性能WEB服务器的特性,如具有很高的可靠性、可用性、可维护性,系统高度可扩展性等特点,相对其它WEB服务器IPLANET还提供更多的JAVA功能。4AOLSERVER331,AOL公司开发的AOLSERVER331是一个多线程、可升级和扩展的WEB服务器。5ROXENWEBSERVER2131,在ROXEN中可以使用RXML语言生成动态网页内容。RXML是函数形式的服务器端XML脚本语言,它由ROXEN服务器解析并执行。6JIGSAW,它由WWW组织W3C开发,W3C组织负责研究和规定网络协议的标准如HTTP。它使用JAVA语言开发,是成功的面向对象、功能全面的服务器。因为JIGSAW不受测试平台的限制,所以JIGSAW是一个具有活力的、拥有无限潜能的优秀WEB服务器。在嵌入式系统的应用中,由于HTMI语言的标准统一性,只要在设备里建立一个微型WEB服务器,人们就可以使用现有的WEB浏览器与该设备进行双向交互、接收或发送信息。它为我们管理、控制和监测各种各样的设备提供了一个很好的途径,只要设备接入了INTERNET,我们就可以在世界上的任何地方十分方便地控制、操纵那些配备有微型WEB服务器的设备。在INTERNET上为了发布信息,用户必须运行WEB服务器程序。但现成的服务器程序有时候不能满足所有人的要求,所以可以动手开发一个自己的WEB服务器程序,其功能就可由设计者定制的功能和需求决定了。13论文研究内容和主要工作本次设计就是需要完成一个简易的WEB服务器的设计,实现WEB服务器基本功能页面访问请求响应、HTML文件的解析以及数据发送。所以在完成设计之前,必须先了解WEB服务器设计的原理与结构。一般来说,WEB服务器通常由以下几个部分组成1服务器初始化部分这部分主要完成WEB服务器的初始化工作,如建立守护进程、创建TCP套接字、绑定端口、将TCP套接字转换成侦听套接字,进入循环结构,等待接收用户浏览器连接2接收客户端请求由于客户端请求以文本行的方式实现,所以服务器一般也以文本行为单位接收3解析客户端请求这部分工作比较复杂,需要解析出请求的方法、URL目标、可选的查询信息及表单信息如果请求方法为HEAD,则简单地返回响应首部即可;如果方法是GET,则首先返回响应首部,然后将客户端请求的URL目标文件从服务器磁盘上读出,再发送给客户端。4发送响应信息之后,关闭与客户机的连接第二章相关理论与知识21LINUX操作系统简介简单点说,LINUX是一套免费使用和自由传播的类UNIX操作系统,是一个基于可移植操作系统接口和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。同事它能运行一些主要的的UNIX工具软件、网络协议和应用程序。它还支持64和32位硬件。LINUX是一个性能稳定的多用户网络操作系统,继承了UNIX以网络为核心的设计思想。它是由全世界成千上万的程序员设计与实现的。是一个不受任何商品化软件版权制约、全世界都能够自由使用的UNIX兼容产品。LINUX模块化的设计结构,使它既能在廉价的PC机上实现UNIX特性,也能在价格高昂的工作站上运行,具备多任务及多用户能力。LINUX系统软件不仅仅包括完整的LINUX操作系统,还包括了高级语言编译器、文本编辑器、等应用软件。另外它还包括图形用户界面,就像WINDOWSNT一样,我们能够使用窗口、菜单和图标进行操作。LINUX的优点可靠、稳定、安全和强大的网络功能。在一些软件的支持下,能够实现WWW、FTP、DHCP、EMAIL、DNS等服务,利用IPTABLES/IPCHAINS构建NAT和功能比较全面的防火墙。22WEB服务器的概念WWW是WORLDWIDEWEB(环球信息网)的缩写,也可以简称为WEB,中文名字为“万维网”。WWW(WORLDWIDEWEB是一种建立在INTERNET上的全球性的、交互的、动态、多平台、分布式、图形信息系统。它只是建立在INTERNET上的一种网络服务。它的开发最初是为了在科学家之间共享成果,科学家们可以将科研成果以图文形式方在网上进行共享。它的最基本的概念就是HYPERTEXT(超文本),如果你用过WINDOWS上的任何一种在线帮助系统你就会比较了解它的结构了。它起源于1989年3月,由欧洲量子物理实验室CERN(THEEUROPEANLABORATORYFORPARTICLEPHYSICS)所发展出来的主从结构分布式超媒体系统。通过万维网,人们只要通过使用简单的方法,就可以很迅速方便地取得丰富的信息资料。由于用户在通过WEB浏览器访问信息资源的过程中,无需再关心一些技术性的细节,界面简单容易操作。长期以来,人们只是通过传统的媒体(如电视、报纸、杂志和广播等)获得信息,但随着计算机网络的发展,人们想要获取信息,已不再满足于传统媒体那种单方面传输和获取的方式,而希望有一种主观的选择性。现在,网络上提供各种类别的数据库系统,如文献期刊、产业信息、气象信息、论文检索等等。由于计算机网络的发展,信息的获取变得非常及时、迅速和便捷。到了1993年,WWW的技术有了突破性的进展,它解决了远程信息服务中的文字显示、数据连接以及图像传递的问题,使得WWW成为INTERNET上最为流行的信息传播方式。现在,WEB服务器成为INTERNET上最大的计算机群,可以说,WEB为INTERNET的普及迈出了开创性的一步,WWW采用的是客户/服务器结构,其作用是整理和储存各种WWW资源,并响应客户端软件的请求,把客户所需的资源传送到WINDOWSNT、UNIX或LINUX等平台上。WEB服务器传送SERVES页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用CALL的方法METHODS。确切一点,你可以说WEB服务器专门处理HTTP请求REQUEST,但是应用程序服务器是通过很多协议来为应用程序提供SERVES商业逻辑BUSINESSLOGIC。WEB服务器WEBSERVERWEB服务器可以解析HANDLESHTTP协议。当WEB服务器接收到一个HTTP请求REQUEST,会返回一个HTTP响应RESPONSE,例如送回一个HTML页面。为了处理一个请求REQUEST,WEB服务器可以响应RESPONSE一个静态页面或图片,进行页面跳转REDIRECT,或者把动态响应DYNAMICRESPONSE的产生委托DELEGATE给一些其它的程序例如CGI脚本,JSPJAVASERVERPAGES脚本,SERVLETS,ASPACTIVESERVERPAGES脚本,服务器端SERVERSIDEJAVASCRIPT,或者一些其它的服务器端SERVERSIDE技术。无论它们译者注脚本的目的如何,这些服务器端SERVERSIDE的程序通常产生一个HTML的响应RESPONSE来让浏览器可以浏览。要知道,WEB服务器的代理模型DELEGATIONMODEL非常简单。当一个请求REQUEST被送到WEB服务器里来时,它只单纯的把请求REQUEST传递给可以很好的处理请求REQUEST的程序译者注服务器端脚本。WEB服务器仅仅提供一个可以执行服务器端SERVERSIDE程序和返回程序所产生的响应RESPONSE的环境,而不会超出职能范围。服务器端SERVERSIDE程序通常具有事务处理TRANSACTIONPROCESSING,数据库连接DATABASECONNECTIVITY和消息MESSAGING等功能。23WEB服务器基本构架WEB应用的基本构架包括浏览器、网络和WEB服务器。浏览器向服务器请求WEB页,WEB页可能包括由浏览器解释执行的客户端脚本,而且可以与浏览器、页内容和页中包含的其他控件(JAVAAPPLET、ACTIVEX控件和插件等)进行交互。用户向WEB页输入信息或通过超级链接导航到其它WEB页,与系统进行交互,改变系统的“业务状态”。221WEB服务器和浏览器WEB是基于请求和响应的系统,它是在C/S(CLIENT/SERVER)结构的基础上发展而来的。为了实现世界范围内的信息共享和发布,它规范了通讯协议,并规范、强化CLIENT/SERVER两端的系统功能,WEB为用户在INTERNET上查看文档提供了一个图形化的,易于进入的界面,WEB是一种基于超文本传输协议(HYPERTEXTTRANSPORTPOTOCOL简称HTTP)向计算机传送多媒体信息(如文本、图片、声音、视频、交互式应用程序)的INTERNET服务。同C/S结构一样,WEB由两部分构成,即WEB服务器端和WEB浏览器端,WEB服务器的主要功能是创建、管理和维护WEB页面,对浏览器的请求进行应答并返回HTML页,WEB浏览器(BROWSER)用来观看WEB资源的客户端软件,主要负责请求,解释并显示WEB页,其工作过程见图21。WEB浏览器通常可以使用流行的IE或者其它的浏览器。服务器端的TCPIP协议是操作系统内嵌的,其信息流符合HTTP协议。服务器中的HTTP引擎用来分析浏览器的请求消息,并根据请求做出相应的动作。这些动作包括向浏览器发送一些静态页面或调用一些应用服务程序。对于服务器中的静态WEB页面,可以使用一些常用软件如FRONTPAGE等制作,以备WEB服务器调用。而服务器中的应用服务程序则用来扩展服务器所提供的服务。从图L中可以看出,微型WEB服务器的核心就是HTTP引擎。HTTP协议是一种网络应用层的标准协议,WEB浏览器和WEB服务器之间的通信都是采用HTTP协议来实现的。因此只要是符合HTTP协议的通讯过程和数据内容,就可以使用浏览器作为客户端进行连接和传递。WEB浏览器WEB服务器请求服务INDEXHTMINTERNET或INTRANET服务器客户机图21WEB工作原理图21主要过程为(1)WEB浏览器通过将URL发给WEB服务器请求信息;(2)WEB服务器响应请求,并返回给客户机超文本标记语言(HTML)页面;(3)WEB浏览器对超文本标记语言(HTML)页面进行解释并显示。222WEB页面WEB页面是WEB系统实现发布、进行管理的主要对象。WEB页面像一个大的容器,将要发布的文字、图片、声音、动画、视频等多种媒体信息封装到一起,供WEB系统实现发布,进行管理。对于WEB系统而言,在众多的WEB页面中,有一个称为WEB主页的页面,它是访问者浏览WEB系统的起点。每个WEB页面都具有唯一的地址,称为统一资源定位符(URL),URL由存储此页面的计算机名和此页面的确切路径构成。WEB页面是超文本标记语言(HTML)编写的。HTML是一种嵌入式语言,通过在普通文本中嵌入各种标记(TAG),使普通文本具有了超级文本的功能。根据WEB页面的内容,可将WEB页面分为三种类型静态页面,动态页面,目录列表页面。24WEB系统的基本原理是请求/响应客户端,浏览器接受用户输入的网页地址(URL)并进行分析,从而得到网页的文件名字和存放网页的计算机地址以及服务程序的端口号,首先根据计算机地址及端口号与服务器建立连接,然后把网页名称及浏览器本身的有关信息按照一定的格式组织起来,发给服务器,这就是请求。比如用户输入HTTP/KULINTS/INDEXHTML,从而可知1计算机名称为BRIUP根据这个名字能获知其计算机地址2端口号为80(HTTP服务的默认端口号)3页面的文件名为INDEXHTML浏览器就与BRIUP上端口号为80的服务程序建立连接,并把类似下面的数据发过(作为服务请求)GET/INDEXHTMHTTP/11ACCEPTIMAGE/GIF,IMAGE/XXBITMAP,APPLICATION/VNDMSPOWERPOINT,/ACCEPTLANGUAGECHUAPIXELS800600UACOLORCOLOR16UAOSWINDOWSXPUACPUP416USERAGENTMOZILLA/20COMPATIBLEMSIE301WINDOWXPHOSTBRIUPCONNECTIONKEEPALIVE其中第一行说明了文件名称(INDEXHTML)、请求的类型(GET)及浏览器支持的协议版本(HTTP/10)服务器端接受到请求后,对其进行分析,解析出网页的文件名称及其他信息比如请求的类型、处理要求等,根据网页的文件名称到磁盘上提取文件内容,把文件内容和一些必要的说明信息打包后发给浏览器,然后断开连接,这就是“响应”。浏览器接到文件内容后就将其中的内容显示出来了比如对于文件长度为2559B的INDEXHTML来说,可以发送如下数据作为“响应”HTTP/11200OKSERVERBRIUPHTTPSVR/11DATEWED,20MAY2006124521CONTENTTYPETEXT/HTMLCONTENTLENGTH2559LASTMODIFIEDSUN,22MAY2006142150上述数据分2大部分,第1部分为“头”,其中,第1行是状态行,包括服务器执行的HTTP版本及本次响应的状态码。后4行分别说明了服务器名称、当前日期、数据类型、数据长度、最后修改的日期和时间。第2部分为数据“体”,是“请求”要求传送的数据,它跟在1个空行之后。当然,客户端和服务器之间还可能有一些中间环节,比如代理服务器、网关、“隧道”等,在此我们先不予考虑。25WEBB/S的通信要完成WEB服务,除了网络通信链路的建立和拆除,之外至少还要有二方面的功能“分折请求”和“构造响应”。客户端与服务器交换数据之前,首先用TCPIP建立连接,客户端向服务器请求数据,服务器则向客户端响应并提供数据客户端和服务器以HTTP协议进行请求和响应服务器和客户端只能为一次事务处理建立并维持连接,完成一次事务处理后便结束连接每一个客户端向服务器发送请求均以方法METHOD开始,后跟对象的URL客户端一般要在上述信息中补充所采用HTTP协议的版本号,其后跟一个回车换行CRLF字符对依据请求情况,浏览器可能在CRLF后加上浏览器按特别的首部格式编码的信息完成后,浏览器给请求加上一个CRLF还可依据请求情况,把一个实体MIME格式文档加到整个请求之后一个HTTP方法实际上是一条命令,客户端用它来说明其请求目的,常用的有GET,HEAD和POSTWEB服务器收到请求并解析之后,以一个HTTP响应消息响应客户端的请求这个响应消息通常以HTTP协议版本号开始,后面是三位状态码和一个原因短语REASONPHRASE,其后是一个CRLF,再后是请求的信息它被服务器以一种特殊的首部格式编码,最后,服务器加上一个CRLF其后还可以有一个可选实体状态码是三位数,它描述了服务器理解和满足请求的情况,原因短语是状态代码的一个简短说明HTTP协议版本号、状态代码、原因短语一起构成了状态行上述分析不难看出,接收客户端请求、解析客户端请求、响应客户端请求、向客户端回送请求的结果是WEB服务器所需完成的主要任务,WEB服务器程序代码主要是为了完成这几项任务251分析请求如前文所述,“请求”的第1行数据是最重要的,它的格式是方法资源地址HTTP版本号回车换行“方法”主要有3种GET要求必须返回一定的内容。有时还必须根据“请求”的要求先对内容做一定的处理比如解压缩或根据时间进行过滤。HEAD处理办法和GET完全相同,但要求只返回“头”,而不可返回任何实质内容“体”。POST用来处理网页的附属内容,比如“注解”、数据回送等。作为简单的服务器,我们只考虑第一行,且只处理GET请求,版本号不予理睬。252构造响应如前文所述,响应的第1行是状态行,非常重要,格式如下HTTP版本号状态码状态文字说明回车换行版本号可取HTTP/11;状态码是3位数字,根据情况按表21所示代码取值。表21状态码值代码特征含义举例1开头的2开头的3开头的4开头的5开头的保留未用成功需要进一步处理客户断错误服务器端错误比如200表示处理成功比如400表示“请求”有错,404表示找不到客户指定的文件作为简易的服务器,“响应”可以只返回状态行和文件内容,即送回如下的内容HTTP/11200OK状态行一个空行文件内容文件内容26LINUX下SOCKET网络编程基础知识本文所设计的WEB服务器是在LINUX操作系统下的SOCKET编程实现,所用的函数均来自LINUX下的SOCKET函数库。客户端和服务器的连接也是用SOCKET套接字来实现的。所以,SOCKET网络编程是设计的基础。261SOCKET简介二十世纪八十年代初,美国国防部高级研究计划署让加利福尼亚大学在UNIX操作系统下实现TCP/IP协议TCP/IP很快被集成到UNIX中,同时出现了许多成熟的TCPRIP应用程序接口API这个API成为SOCKET接口。今天,SOCKET接口是TCPFIP网络最为通用的API,也是在INTERNET上进行应用开发最为通用的APILUUL。SOCKET实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有SOCKET接口的计算机通信。应用程序在网络上传输、接收的信息都通过这个SOCKET接口来实现,在应用开发中就像使用文件句柄一样,可以对SOCKET语句进行读、写操作,我们将SOCKET翻译为套接字。262SOCKET的定义网络的SOCKET数据传输是一种特殊的I/OSOCKER也是一种文件描述符。SOCKET也具有一个类似于打开文件的函数调用SOCKET()该函数返回一个整型的SOCKET描述符,随后的连接建立、数据传输等操作都是通过该SOCKET实现的。常用的SOCKET类型有两种形式流式SOCKETSXK_STREAM和数据报式SOCKET_SOCKDGRAM。流式是一种面向连接的SOCKET,针对于面向连接的TCP服务应用;数据报式SOCKET是一种无连接的SOCKET对应于无连接的UDPSOCKET务应用。263SOCKET结构体1套接字结构STRUCTSOCKADDR_INSHORTINTSIN_FAMILY/地址类型AF_XXXAF_UNIX,AF_INET和AF_NSUNSIPEDSHORTINTSIN_PORT/16位端口号STRUCTIN_ADDRSIN_ADDR/32位IP地址CHARSIN_ZERO8L/保留/端口号以及INTCMET地址使用的是网络字节顺序,需要通过函数HTONS转换用这个数据结构可以轻松处理套接字地址的摹本元素。注意SINZCRO(它被加入到这个结构,并且长度和SUUCTSOCKADDR一样)应该使用函数BZER或MEMSET来全部置零。同时,这一重要的字节,一个指向SCEKADDR_IN结构体的指针也可以被指向结构体SOCKADDR并且代替它。这样的话即使SBOCKET想要的是SRRUCTSOCKADDR,你仍然可以使用STRUCTSACKADDR_IN,并且在最后转换。同时,注意SIN_FAMILY和STRUCTSOCKADDR中的SA_FAMILY致并能够设置为“AFINET”。最后,SIN_PORT和SIN_ADDR必须是网络字节顺序NETWORKBYTEORDER2主机结构STRUCTHOSTENTCHARH_NAME/主机的正式名称CHARH_ALIASES/类别列表INTH_ADDRTYPE/主机地址类型AFXXXINTH_LENGTH/主机地址长度4字节(32位)CHARH_ADDR_LIST/主机IP地址列表,网络字节顺序DEFINEH_ADDRH_ADDR_LIST0/H_ADDR是H_ADDR_LIST中的第一地址264SOCKET函数库L套接字函数INTSOCKETINTDOMAIN,INTTYPE,INTPROTOCOL函数SOCKET创建一个套接字描述符,如果失败返回NBSPL。DOMAIN为地址类型AFXXX,TYPE为套接字类型,SOCK_STREAMTCP,SOCK_DGRAMUDP,SOCK_RAWIP、ICMPPROTOCOL指定协议,0为默认模式。2绑定函数INTBINDINTSOCKFD,STRUCTSOCKADDRHOSTADDR,INTADDRLEN函数BIND将本地地址与套接字绑定在一起,成功返回0,失败为L,并设置全局变量ERMO为错误类型EADDRINUSER。此函数的三个参数分别为1SOCKFD为SOCKET调用返回的文件描述符2ADDRESS是指向包含有本机IP地址及端口号等信息的SOCKADDR类型的指针,它的类型是STRUCTSOCKADDR_IN;3SIN_FALNILY般为AFLNTE3连接函数INTCONNECTINTSOCKFD,STRUCTSOCKADDRSERVADDR,INT_ADDRLEN函数CONNECT与服务器建立一个连接,成功返回0,失败返回L。SERVADDR为远程服务器套接字地址,包括服务器的IP地址和端口号;ADDLEN为地址的长度。4接受请求函数INTACCEPTINTSOCKFDSTRUCTSOCKADDRADDR,INTADDRLEN函数ACCEPT从IISTEN的完成连接队列中接收一个连接,如果连接队列为空,则该进程睡眠。5监听函数INTLISTENINTSOCKFD,INTBACKLOG函数LISTEN将一个套接字转换为倾听套接字,执行成功返回0失败为一1。BACKLOG设置请求队列的最大长度。6写入函数INTWRITEINTFD,CHARBUFINTLEN读取函数INTREAD(INTFD,CHARBUF,INTLEN);函数READ和WRITE从套接字读和写数据,成功返回数据量大小,否则返回L。BUF指定数据缓冲区,LEN指定接收或发送的数据量大小。7创建子进程函数PIDTFORKVOID在服务器端,一般在由FORK函数生成的子进程来调用数据传输函数,FORK函数是拷贝父进程的内存映象来创建子进程,事实上它返回两个进程控制号。对于父进程它返回子进程ID,对于子进程它返回0。8关闭连接函数INTCLOSEINTSOCKFD函数CLOSE关闭一个套接字描述符,成功返回O,失败为L。9取本机地址函数STRUCTHOSTENTGETHOSTBYNAMECONSTCHARHOSTNAME函数GETHOSTBYNAME查询指定的域名地址对应的IP地址,返回一个HOSTENT结构的指针,如果不成功返回NULL。IO字节顺序转换函数H表示”HOST,N表示”NETWORK”,S表示”SHORT”,L表示”LONG”。HTONS“HOSTTONELWORKSHORT“HTONL()“HOSTTONETWORKLONG“HTOHS()“NETWORKTOHOSTSHORT“NTOM0“NETWORKTOHOSTLONG“265SOCKET编程的基本过程利用SOCKET编程,一般按照以下的基本过程1建立一个SOCKET2定义程序的SOCKET使用3配置SOCKET;4通过SOCKET传输数据;5通过SOCKET接受数据;6关闭SOCKET。27HTTP协议271HTTPURL掌握HTTP虽然不是必须的,但是如果你知道它的工作原理,那么在学习JSP开发中的某些知识就可以易如反掌了。一,HTTP协议详解之URL篇HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP11版本中给出一种持续连接的机制,绝大多数的WEB开发,都是构建在HTTP协议之上的WEB应用。HTTPURLURL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息的格式如下HTTP/HOST“PORTABS_PATHHTTP表示要通过HTTP协议来定位网络资源;HOST表示合法的INTERNET主机域名或者IP地址;PORT指定一个端口号,为空则使用缺省端口80;ABS_PATH指定请求资源的URI;如果URL中没有给出ABS_PATH,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。272HTTP请求HTTP请求由三部分组成,分别是请求行、消息报头、请求正文1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下METHODREQUESTURIHTTPVERSIONCRLF其中METHOD表示请求方法;REQUESTURI是一个统一资源标识符;HTTPVERSION表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。请求方法(所有方法全为大写)有多种,各个方法的解释如下GET请求获取REQUESTURI所标识的资源POST在REQUESTURI所标识的资源后附加新的数据HEAD请求获取由REQUESTURI所标识的资源的响应消息报头PUT请求服务器存储一个资源,并用REQUESTURI作为其标识DELETE请求服务器删除REQUESTURI所标识的资源TRACE请求服务器回送收到的请求信息,主要用于测试或诊断CONNECT保留将来使用OPTIONS请求查询服务器的性能,或者查询与资源相关的选项和需求应用举例GET方法在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET方法向服务器获取资源,EGGET/FORMHTMLHTTP/11CRLFPOST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。273HTTP响应HTTP响应也是由三个部分组成,分别是状态行、消息报头、响应正文1、状态行格式如下HTTPVERSIONSTATUSCODEREASONPHRASECRLF其中,HTTPVERSION表示服务器HTTP协议的版本;STATUSCODE表示服务器发回的响应状态代码;REASONPHRASE表示状态代码的文本描述。状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值1XX指示信息表示请求已接收,继续处理2XX成功表示请求已被成功接收、理解、接受3XX重定向要完成请求必须进行更进一步的操作4XX客户端错误请求有语法错误或请求无法实现5XX服务器端错误服务器未能实现合法的请求常见状态代码、状态描述、说明200OK/客户端请求成功400BADREQUEST/客户端请求有语法错误,不能被服务器所理解401UNAUTHORIZED/请求未经授权,这个状态代码必须和WWWAUTHENTICATE报/头域一起使用403FORBIDDEN/服务器收到请求,但是拒绝提供服务404NOTFOUND/请求资源不存在,EG输入了错误的URL500INTERNALSERVERERROR/服务器发生不可预期的错误503SERVERUNAVAILABLE/服务器当前不能处理客户端的请求,一段时间后,可能恢复正常274HTTP消息报头HTTP消息由客户端到服务器的请求和服务器到客户端的响应组成。请求消息和响应消息都是由开始行(对于请求消息,开始行就是请求行,对于响应消息,开始行就是状态行),消息报头(可选),空行(只有CRLF的行),消息正文(可选)组成。HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每一个报头域都是由名字“”空格值组成,消息报头域的名字是大小写无关的。1、普通报头在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。EGCACHECONTROL用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP10使用的类似的报头域为PRAGMA。请求时的缓存指令包括NOCACHE(用于指示请求或响应消息不能缓存)、NOSTORE、MAXAGE、MAXSTALE、MINFRESH、ONLYIFCACHED响应时的缓存指令包括PUBLIC、PRIVATE、NOCACHE、NOSTORE、NOTRANSFORM、MUSTREVALIDATE、PROXYREVALIDATE、MAXAGE、SMAXAGEEG为了指示IE浏览器(客户端)不要缓存页面,服务器端的JSP程序可以编写如下RESPONSESEHHEADER“CACHECONTROL“,“NOCACHE“/RESPONSESETHEADER“PRAGMA“,“NOCACHE“作用相当于上述代码,通常两者/合用这句代码将在发送的响应消息中设置普通报头域CACHECONTROLNOCACHEDATE普通报头域表示消息产生的日期和时间CONNECTION普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“CLOSE”选项,通知服务器,在响应完成后,关闭连接2、请求报头请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。常用的请求报头ACCEPTACCEPT请求报头域用于指定客户端接受哪些类型的信息。EGACCEPTIMAGE/GIF,表明客户端希望接受GIF图象格式的资源;ACCEPTTEXT/HTML,表明客户端希望接受HTML文本。ACCEPTCHARSETACCEPTCHARSET请求报头域用于指定客户端接受的字符集。EGACCEPTCHARSETISO88591,GB2312如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。ACCEPTENCODINGACCEPTENCODING请求报头域类似于ACCEPT,但是它是用于指定可接受的内容编码。EGACCEPTENCODINGGZIPDEFLATE如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。ACCEPTLANGUAGEACCEPTLANGUAGE请求报头域类似于ACCEPT,但是它是用于指定一种自然语言。EGACCEPTLANGUAGEZHCN如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。AUTHORIZATIONAUTHORIZATION请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含AUTHORIZATION请求报头域的请求,要求服务器对其进行验证。HOST(发送请求时,该报头域是必需的)HOST请求报头域主要用于指定被请求资源的INTERNET主机和端口号,它通常从HTTPURL中提取出来的,EG我们在浏览器中输入HTTP/WWWNITEDUCN/INDEXHTML浏览器发送的请求消息中,就会包含HOST请求报头域,如下HOSTWWWNITEDUCN此处使用缺省端口号80,若指定了端口号,则变成HOSTWWWNITEDUCN指定端口号USERAGENT我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从USERAGENT这个请求报头域中获取到这些信息。USERAGENT请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用USERAGENT请求报头域,那么服务器端就无法得知我们的信息了。请求报头举例GET/FORMHTMLHTTP/11CRLFACCEPTIMAGE/GIF,IMAGE/XXBITMAP,IMAGE/JPEG,APPLICATION/XSHOCKWAVEFLASH,APPLICATION/VNDMSEXCEL,APPLICATION/VNDMSPOWERPOINT,APPLICATION/MSWORD,/CRLFACCEPTLANGUAGEZHCNCRLFACCEPTENCODINGGZIP,DEFLATECRLFIFMODIFIEDSINCEWED,05JAN2007112125GMTCRLFIFNONEMATCHW/“80B1A4C018F3C418317“CRLFUSERAGENTMOZILLA/40COMPATIBLEMSIE60WINDOWSNT50CRLFHOSTWWWNITEDUCNCRLFCONNECTIONKEEPALIVECRLFCRLF3、响应报头响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对REQUESTURI所标识的资源进行下一步访问的信息。常用的响应报头LOCATIONLOCATION响应报头域用于重定向接受者到一个新的位置。LOCATION响应报头域常用在更换域名的时候。SERVERSERVER响应报头域包含了服务器用来处理请求的软件信息。与USERAGENT请求报头域是相对应的。下面是SERVER响应报头域的一个例子SERVERAPACHECOYOTE/11WWWAUTHENTICATEWWWAUTHENTICATE响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送AUTHORIZATION报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。EGWWWAUTHENTICATEBASICREALM“BASICAUTHTEST“/可以看出服务器对请求资源采用的是基本验证机制。4、实体报头请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(EG有无实体正文)和请求所标识的资源的元信息。常用的实体报头CONTENTENCODINGCONTENTENCODING实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得CONTENTTYPE报头域中所引用的媒体类型,必须采用相应的解码机制。CONTENTENCODING这样用于记录文档的压缩方法,EGCONTENTENCODINGGZIPCONTENTLANGUAGECONTENTLANGUAGE实体报头域描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言阅读者。EGCONTENTLANGUAGEDACONTENTLENGTHCONTENTLENGTH实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。CONTENTTYPECONTENTTYPE实体报头域用语指明发送给接收者的实体正文的媒体类型。EGCONTENTTYPETEXT/HTMLCHARSETISO88591CONTENTTYPETEXT/HTMLCHARSETGB2312LASTMODIFIEDLASTMODIFIED实体报头域用于指示资源的最后修改日期和时间。EXPIRESEXPIRES实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载的页面,我们可以使用EXPIRES实体报头域指定页面过期的时间。EGEXPIRESTHU,15SEP2006162312GMTHTTP11的客户端和缓存必须将其他非法的日

温馨提示

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

评论

0/150

提交评论