Web服务器的设计与实现.doc_第1页
Web服务器的设计与实现.doc_第2页
Web服务器的设计与实现.doc_第3页
Web服务器的设计与实现.doc_第4页
Web服务器的设计与实现.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

本科生毕业设计(论文) 学院(系): 软件学院 专 业: 软件工程 学 生: + 指导教师: + 完成日期 20+年 4 月 +学院本科生毕业设计(论文) WEB服务器的设计与实现 The Design and implementation ofWEBserver总计: 毕业设计(论文)24 页表 格: 0 个插 图 : 2 幅+学 院 本 科 毕 业 设 计(论文) WEB服务器的设计与实现The Design and implementation ofWEBserver学 院(系): 软件学院 专 业: 软件工程 学 生 姓 名: + 学 号: + 指 导 教 师(职称): +) 评 阅 教 师: 完 成 日 期: + +Web服务器的设计与实现软件工程专业 + 摘 要Web服务器的实现主要是服务器端接受并响应客户端的请求,本次设计是在Visual Studio 2005开发平台上使用C#编程技术设计Web服务器。在当今,网络已经成为每个人生活中必不可少的沟通工具。因此,关于网络资源的共享也成为了热门话题。Web服务器的设计目的在于主要功能是提供网上信息浏览服务。本次毕业设计中我们的Web服务器工作原理是由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信,即实现数据传送。最后通过对WEB服务器的设计与运行,我们可以在Web浏览器中输入Web服务器的socket,能够实现Web服务器与Web浏览器之间的通信,从而实现网络数据共享。 关键词Winsock;套接字;web服务器 The Design and implementation ofWEBserverSoftware Engineering Major SHI Gao-jiong Abstract:Web server is a server-side to achieve the main receive and respond to client requests,This design is the development platform in Visual Studio 2005 using C # design Web server programming technique.。In todays,Internet has become indispensable to peoples lives every communication tool.Therefore,resource sharing on the network has become a hot topic.Web server is designed to primarily function is to provide online information browsing service.The course design principle of our Web server by Web browser (client) and Web server (server) form between the two using the Hypertext Transfer Protocol (HTTP) to communicate,of achieving data transfer.Finally, through the design and operation of WEB server, we can enter the Web browser, Web server, socket, Web server and enables communication between Web browser, allowing the network to data sharing. Key words: Win sock;Sockets;Web Servers目 录 前言11系统需求分析11.1系统及需求分析11.2可行性分析11.3软件开发的目标11.4开发工具简介22 Web服务器的工作原理32.1 HTTP协议的作用原理32.2 系统架构53 开发环境及套字接编程63.1 Web服务器的开发环境63.2 C#开发语言相关知识与技术73.3 C#中的多线程和实现83.4 Web服务器的套接字编程93.5套接字编程原理104 WEB服务器的设计与实现114.1 Web服务器的程序设计流程114.2 用C#实现Web服务器的设计与实现115 全文总结16参考文献17致谢18Web服务器的设计与实现前言众所周知,网络技术是当前计算机领域中最为热门的发展方向,正如当年的个人电脑以惊人的速度和规模进入人类的各个科研领域和日常生活中,从而替代了大型机和中型机,网络的飞速发展给人类的生存和生活方式又带来了一次巨大的冲击。“未来的信息时代是网络的时代”这种观点正被越来越多的人接受,甚至现在我们可以说“网络就是计算机”。鉴于本人比较喜欢网络编程,而且更喜欢探索计算机网络技术的底层秘密,所以在准备课题的时候就选择了大家都较为熟悉的Web服务器软件的设计,希望通过本次毕业设计,对C#网络底层编程和HTTP协议原理等运用较广的知识能有一个较为全面的了解;同时也希望设计的软件具有一定的可用性,能够在Web服务器开发中都能运行使用。本毕业设计主要解决由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信的Web服务器的程序设计。1系统需求分析1.1 系统及需求分析(1)熟悉WWW服务器和WEB服务器的工作原理;(2)熟悉套接字编程的相关知识;(3)完成一个简单的WEB服务器的设计与实现,要求能够通过HTTP GET命令获得一个简单的HTML文件;(4)运行该服务器,并编写一个简单的HTML文件完成测试。1.2可行性分析本软件的核心问题是实现对http协议请求与获取,由此可知在开发工程中主要是实现基于TCP/IP协议的网络编程等相关问题,而对于这些技术在.NET下都得到了很好的支持,借助Visual Studio 2005提供的大量向导-特别是在生成数据存取代码方面的向导,将大大减少代码的编写量,同时Visual Studio封装了与Winsock有关的类,因此在实际开发中的主要难度就集中在了功能的设计上而非代码的编写上,大大降低了编程的复杂度,提高了软件开发的成功率。因此,本软件的开发在技术上是完全可行的。1.3软件开发的目标本软件主要为开发人员提供一个web服务器的设计和实现基本功能,方便开发人员使用,软件将采用C/S的开发模式,C/S的优点就是由于客户端实现与服务器的直接相连,没有中间环节,因此响应速度快。使软件模型具有良好的再塑性,以此为基础来进行软件的二次开发。1.4开发工具简介以下的工作均是建立在大量的调查基础上的,是Web服务器开发前期准备工作所解决的问题。(1)技术简介.NET技术简介.NET技术是2000年微软公司推出的全新概念,它代表了一个集合、一个环境、一个编程的基础结构。其目的是将互联网本身作为构建新一代操作系统的基础,对互联网和操作系统的设计思想进行延伸。具体地说,.NET技术就是要在不同的网站之间建立起协定,促进网站之间的协同合作,实现信息的自动交流,从而帮助用户最大限度地获取信息、并对他们的数据进行简单、高效的管理。Visual Studio.NET简介Visual Studio .NET是Microsoft为实现其.NET技术而开发的一整套工具组件。它把开发功能强大、性能可靠的企业网络解决方案进行了简化。通过提供终端到终端的网络开发能力以及可伸缩、可复用的服务器端组件。Visual Studio .NET的主要作用在于:第一、提供加速开发过程的高效工具;第二、提供对各种各样的网络应用程序的快速设计能力,即程序员可以借助于Web Forms在开发基于窗体的桌面应用程序时所使用的技巧来创建跨平台、跨浏览器的网络应用程序;第三、利用XML和Web Services来简化分布式1。开发语言选择C#是一种现代的面向对象的程序开发语言,它使得程序员能够在新的微软.NET平台上快速开发种类丰富的应用程序。.NET平台提供了大量的工具和服务,能够最大限度地发掘和使用计算及通信能力。由于其一流的面向对象的设计,从构建组件形式的高层商业对象到构造系统级应用程序你都会发现C#将是最合适的。选择使用C#语言设计的组件能够用于Web服务,这样通过Internet可以被运行于任何操作系统上任何编程语言所调用。C#还能为C+程序员提供快捷的开发方式又没有丢掉C和C+的基本特征强大的控制能力,C#与C和C+有着很大程度上的相似性,熟悉C和C+的开发人员很快就能精通C#2。正如前文所述,C#是专门为.NET应用而开发出的语言,这从根本上保证了C#与.NET框架的完美结合。在.NET运行库的支持下,.NET框架的各种优点在C#中表现得淋漓尽致。让我们来看看C#的一些突出的特点,相信了解了这些特点以及本项目后你将会深深体会到“#”“SHARP”的真正含义:简洁的语法;精心的面向对象设;与Web的紧密结合;完整的安全性与错误处理;版本处理技术;灵活性与兼容性。C#是由微软公司开发的一种新型的面向对象的程序设计语言,主要用于web页面的设计1。C#语言的流行除了因为它能够编制嵌入HTML文件中的Applet外,还在于C#语言本身的面向对象、简单、平台无关性、安全性、多线程等特点。C#语言的发展颇具传奇性,它与Internet的WWW的迅猛发展是分不开的。由于其发展迅速,有人将它比喻为Internet上的世界语。前面讲到在Internet上Web页面的设计采用的是HTML语言,用户借助于Web浏览器(如Netscape,C#,IE等),可以访问到远程web服务器上静态的、具有超链接的Web页面2。 (2)HTTP协议简介HTTP 协议是应用层的协议,定义了服务器端和客户端之间文件传输的沟通方式。HTTP协议用于从WWW服务器传输超文本到本地浏览器的传送协议。由于HTTP协议支持的服务不限于WWW,还可以是其它服务,它允许用户在统一的界面下,采用不同的协议访问不同的服务。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示等。2 Web服务器的工作原理2.1 HTTP协议的作用原理WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页。WWW的工作基于客户机/服务器计算模型,由Web 浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。HTTP协议的作用原理包括四个步骤:连接,请求,应答,关闭应答6。 HTTP协议的作用原理包括四个步骤: (1)连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。 (2) 请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为: GET 路径/文件名 HTTP/1.0 文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。 (3) 应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。 例:假设客户机与/mydir/index.html建立了连接,就会发送GET命令:GET /mydir/index.html HTTP/1.0。主机名为 / 的Web服务器从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。 为了告知 Web浏览器传送内容的类型,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。 (标头 (header) 是服务器以 HTTP 协议传 HTML 资料到浏览器前所送出的字串,在标头与 HTML 文件之间尚需空一行分隔。)(4) 关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。 Web服务器在Web页面处理中大致可分为三个步骤:第一步,Web浏览器向一个特定的服务器发出Web页面请求;第二步,Web服务器接收到 Web页面请求后,寻找所请求的Web页面,并将所请求的Web页面传送给Web浏览器;第三步,Web服务器接收到所请求的Web页面,并将它显示出来。WEB服务器提供服务的方式 WEB服务器由于要同时为多个客户提供服务,就必须使用某种方式来支持这种多任务的服务方式。一般情况下可以有以下三种方式来选择,多进程方式、多线程方式及异步方式。其中,多进程方式中服务器对一个客户要使用一个进程来提供服务,由于在操作系统中,生成一个进程需要进程内存复制等额外的开销,这样在客户较多时的性能就会降低。为了克服这种生成进程的额外开销,可以使用多线程方式或异步方式。在多线程方式中,使用进程中的多个线程提供服务,由于线程的开销较小,性能就会提高。事实上,不需要任何额外开销的方式还是异步方式,它使用非阻塞的方式与每个客户通信,服务器使用一个进程进行轮询就行了。虽然异步方式最为高效,但它也有自己的缺点。因为异步方式下,多个任务之间的调度是由服务器程序自身来完成的,而且一旦一个地方出现问题则整个服务器就会出现问题。因此,向这种服务器增加功能,一方面要遵从该服务器自身特定的任务调度方式,另一方面要确保代码中没有错误存在,这就限制了服务器的功能,使得异步方式的Web 服务器的效率最高,但功能简单。由于多线程方式使用线程进行任务调度,这样服务器的开发由于遵从标准,从而变得简单并有利于多人协作。然而多个线程位于同一个进程内,可以访问同样的内存空间,因此存在线程之间的影响,并且申请的内存必须确保申请和释放。对于服务器系统来讲,由于它要数天、数月甚至数年连续不停的运转,一点点错误就会逐渐积累而最终导致影响服务器的正常运转,因此很难编写一个高稳定性的多线程服务器程序。多进程方式的优势就在于稳定性,因为一个进程退出的时候,操作系统会回收其占用的资源,从而使它不会留下任何垃圾。即便程序中出现错误,由于进程是相互隔离的,那么这个错误不会积累起来,而是随着这个进程的退出而得到清除4。2.2 系统架构 (1)C/S网络架构客户端/服务器架构,通常情况下,数据存储在服务器端,客户端和服务器端都有一个独立的应用程序,可以进行独立的操作,通过网络进行数据传输。C/S网络架构的优点:应用服务器运行数据负荷较轻,数据的储存管理功能较为透明以及客户端响应速度快。缺点就是:客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。另外,还有兼容性不是很好。常用的传输协议包括:TCP/IP:基于连接的协议优点:由于是有连接的传输,对于数据的准确性是有保证的。缺点:系统资源占用较多。UDP/IP:无连接的协议(数据报)优点:系统资源占用少。缺点:无法保证传输的准确性。用途:a.对于数据少量丢失可以接受的应用。b.存在足够数据冗余的应用。 (2)B/S网络架构浏览器/服务器架构,在服务器端完成几乎所有的功能(包括数据存储),客户端的浏览器只完成和服务器交互和显示服务器传输的信息的功能。B/S网络架构的优点:具有分布性特点,可以随时随地进行查询、浏览等业务处理;业务扩展简单方便,通过增加网页即可增加服务器功能;维护简单方便,只需要改变网页,即可实现所有用户的同步更新以及开发简单,共享性强。但是,B/S网络架构的缺点也是显而易见的,个性化特点明显降低,无法实现具有个性化的功能要求;操作是以鼠标为最基本的操作方式,无法满足快速操作的要求;页面动态刷新,响应速度明显降低;功能弱化,难以实现传统模式下的特殊功能要求。常用的传输协议包括:http:超文本传输协议,是客户端浏览器或其他程序与服务器器之间的应用层通信协议。https:支持多种加密操作的超文本传输协议。http包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。 优点:客户端不需要安装任何附加软件,同时整个应用的升级也相对简单。IP:通过IP Address和Port(端口)定位具体的应用;Port的有效范围是065535,通常在开发应用时应避免使用1000以下的端口,1000以下有很多端口被常用应用占用。IP Address在C#中支持4位或6位两种方式,现在4位的占据主导地位,但将来会逐渐过渡到6位IP地址的模式。TCP/IP协议的实现:a.Socket类:服务器端使用,用于监听客户端的请求。b.Socket类:服务器端和客户端使用,用于完成具体通信的所有功能。UDP/IP协议的实现:a.DatagramSocket类:服务器端和客户端使用,用于实现通信的基本功能。b.DatagramPacket类:服务器端和客户端使用,用于封装通信的内容信息。3 开发环境及套字接编程3.1 Web服务器的开发环境 该毕业设计是基于C#编程语言的设计的Web服务器,系统开发过程中将采用软件工程的思想进行系统的开发工作,以保证系统的质量。系统的架构将采用作为当今开发模式技术架构的主流技术C/S架构。服务器端主要是完成数据的操作,而客户端则为用户提供一个完善的可视化界面。系统将使用功能强大的Visual Studio.NET 2005作为开发环境,使用Microsoft SQL Server 2005建立数据库模型,并对数据库进行管理。为了保证系统的安全性、可移植性,在系统实施过程中,在语言方面,采用此开发环境支持的C#编程语言。C#是由Microsoft开发的一种新型编程语言。它是一种可视化的、完全面向对象的高级程序设计语言,可用于开发Windows环境下的各种应用程序。它继承了C+和Java这两种世界上最重要的计算机语言的优点,并且还增加了指代、索引等创新性特点;同时,C#语言利用.NET作为其强大的平台,使得它在Windows图形用户界面、ASP.NET Web应用、XML Web Service及ADO.NET数据库方面有广泛的应用。在Visual Studio.NET 2005环境下,利用C#可以高效、快速地开发出基于C/S模式的应用软件系统。3.2 C#开发语言相关知识与技术C#主要技术有:多线程,I/O流操作,网络编程。关于线程的定义:每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。 线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程. 线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU。C#中流的概念:在计算机编程中,流就是一个类的对象,很多文件的输入输出操作都以类的成员函数的方式来提供。计算机中的流其实是一种信息的转换。它是一种有序流,因此相对于某一对象,通常我们把对象接收外界的信息输入(Input)称为输入流,相应地从对象向外输出(Output)信息为输出流,合称为输入/输出流(I/O Streams)。对象间进行信息或者数据的交换时总是先将对象或数据转换为某种形式的流,再通过流的传输,到达目的对象后再将流转换为对象数据。所以,可以把流看作是一种数据的载体,通过它可以实现数据交换和传输。程序中流的概念和操作系统中流的概念是不一样的,操作系统中的流可以看成是数据流,而程序中的流的概念其实是一个用来处理流的类。流就是在内存中操作数据的一种方式,C#里有很多封装类不一定都要用流。网络编程的定义:通过使用套接字来达到进程间通信目的编程就是网络编程。windows提供的基于网络编程的就是套接字也就是winsock,但是现在Winpcap也是一个比较方便的工具。网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的!中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理。3.3 C#中的多线程及实现C#是面向对象的程序语言,用C#进行程序设计就是设计和使用类,C#为我们提供了线程类Thread来创建线程,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。下面是一个创建启动一个线程的语句: Thread thread1=new Thread();/声明一个对象实例,即创建一个线程; Thread1.run(); /用Thread类中的run()方法启动线程; 从这个例子,我们可以通过Thread()构造方法创建一个线程,并启动该线程。事实上,启动线程,也就是启动线程的run()方法,而Thread类中的run()方法没有任何操作语句,所以这个线程没有任何操作。要使线程实现预定功能,必须定义自己的run()方法。C#中通常有两种方式定义run()方法: 通过定义一个Thread类的子类,在该子类中重写run()方法。Thread子类的实例对象就是一个线程,显然,该线程有我们自己设计的线程体run()方法,启动线程就启动了子类中重写的run()方法。 通过Runnable接口,在该接口中定义run()方法的接口。所谓接口跟类非常类似,主要用来实现特殊功能,如复杂关系的多重继承功能。线程被实际创建后处于待命状态,激活(启动)线程就是启动线程的run()方法,这是通过调用线程的start()方法来实现的。 线程状态:1)New当线程对象被创建时,处于该状态。 2)Runnable:就绪状态,线程满足运行的所有条件但没有正在运行的线程位于该状态,有以下几种情况: a.处于New状态的线程执行start()。 b.处于Running状态的线程失去CPU。 c.处于Otherwise Block状态的线程阻塞解除。 d.处于Lock Block状态的线程阻塞解除。 3)Running:运行状态处于运行状态的线程可能发生以下几种情况: a.线程运行结束,进入Dead状态。 b.CPU被分配给其它线程,进入Runnable状态。 c.满足Otherwise Block的条件,进入Otherwise Block状态。 d.由于锁的原因无法执行,进入Lock Block状态。 e.由于等待的原因无法执行,进入Wait Block状态。 4)Dead:死亡状态线程运行结束,对于主线程main()结束,对于普通用户线程run()结束。 5)Otherwise Block:阻塞状态,阻塞解除后进入Runnable状态 a.调用sleep(),阻塞解除条件为阻塞时间满。 b.调用join(),阻塞解除条件为调用join()的线程执行结束。注意:线程进入该状态不会释放锁。 6)Lock Block:锁阻塞状态,阻塞解除后进入Runnable状态由于无法获得需要的锁而阻塞地线程进入该状态,阻塞解除条件为获得所需的锁。 7)Wait Block:等待阻塞状态,阻塞解除后进入Lock Block状态由于某个资源的原因必须进行等待,则进入该状态。阻塞解除条件为其它线程调用该资源的notify()或notifyAll()。3.4 Web服务器的套接字编程C#提供了一个Socket类,程序员可以很方便地用它编写服务器程序。服务器套接字的基本功能类似于坐在电话机旁边等待呼叫到来。从技术上讲, Socket运行在服务器上并监听到来的 TCP连接。在网络上通信,可以采取Socket的形式,也就是说再即将要通信的两端分别建立一个Socket对象。浏览器端的Socket发送HTTP请求,并接受来自服务器端的HTTP的回应。每个Socket都在服务器上的指定端口监听。当远程主机上的客户Socket试图与指定端口建立连接时,服务器被激活,判定客户程序与服务器的连接,并打开两个主机之间固有的Socket。一旦与服务器套接字建立了连接,则服务器就可以使用固有的Socket对象向客户机发送数据。数据总是通过固有的套接字传递6。3.5套接字编程原理(1)客户机/服务器模式在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的7。客户机/服务器模式在操作过程中采取的是主动请示方式:首先服务器方要先启动,并根据请示提供相应服务:(过程如下)1、打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求。2、等待客户请求到达该端口。3、接收到重复服务请求,处理该请求并发送应答信号。4、返回第二步,等待另一客户请求5、关闭服务器。客户方:1、打开一通信通道,并连接到服务器所在主机的特定端口。2、向服务器发送服务请求报文,等待并接收应答;继续提出请求。3、请求结束后关闭通信通道并终止。(2)基本套接字1、创建套接字socket()功能:使用前创建一个新的套接字2、指定本地地址bind()功能:将套接字地址与所创建的套接字号联系起来。3、建立套接字连接connect()和accept()功能:共同完成连接工作4、监听连接listen()功能:用于面向连接服务器,表明它愿意接收连接。5、数据传输send()与recv()功能:数据的发送与接收6、多路复用select()功能:用来检测一个或多个套接字状态。7、关闭套接字closesocket()功能:关闭套接字4 WEB服务器的设计与实现4.1 Web服务器的程序设计流程根据上述HTTP协议的作用原理,实现GET请求的Web服务器程序的方法如下: (1) 创建Socket类对象,监听端口8080。这是为了区别于HTTP的标准TCP/IP端口80而取的; (2) 等待、接受客户机连接到端口8080,得到与客户机连接的socket; (3) 创建与socket字相关联的输入流instream和输出流outstream; (4) 从与socket关联的输入流instream中读取一行客户机提交的请求信息,请求信息的格式为:GET 路径/文件名 HTTP/1.0;(5) 从请求信息中获取请求类型。如果请求类型是GET,则从请求信息中获取所访问的HTML文件名。没有HTML文件名时,则以index.html作为文件名; (6) 如果HTML文件存在,则打开HTML文件,把HTTP头信息和HTML文件内容通过socket传回给Web浏览器,然后关闭文件。否则发送错误信息给Web浏览器; (7) 关闭与相应Web浏览器连接的socket字。 4.2 用C#实现Web服务器的设计与实现 在web服务器的默认文件夹中寻找目录的主要功能代码如下: public string GetTheDefaultFileName (string sLocalDirectory)StreamReader sr;String sLine = ;trysr = new StreamReader(dataDefault.Dat);while (sLine = sr.ReadLine() != null)/在web服务器的默认文件夹中寻找所需的目录if (File.Exists( sLocalDirectory + sLine) = true)break;catch(Exception e)Console.WriteLine(An Exception Occurred : + e.ToString();if (File.Exists( sLocalDirectory + sLine) = true)return sLine;elsereturn ;寻找目录的流程图:提示错误获得所需文件夹名返回列表找到文件夹存在不存在 图 4-1 寻找目录的简单流程图 获得所需的文件夹名,然后寻找所需的文件夹。如果存在则显示返回列表,不存在则提示错误。 WEB服务器的具体请求和回应实现主要功能简单流程图:提示错误处理客户端请求提取请求的文件和目录以及类型找到HTTP具体请求发送到浏览器找到文件建立连接存在不存在 图 4-2 web服务器的请求和回应的流程图 首先建立连接,然后客户端发送请求,服务器处理客户端的请求。然后找到HTTP的具体请求,提取请求的文件和目录以及类型。如果文件存在则发送到浏览器界面,如果不存在则提示错误。 根据HTTP协议的作用原理,实现GET请求Web服务器程序的方法。通过监听某端口(如:8080),等待和接受客户机连接到该端口,得到与客户机连接的socket;从与socket关联的输入流中读取一行客户机提交的请求信息,其中请求的信息的格式为:GET 路径/文件名 HTTP/1.0。然后再从请求的信息中获取请求的类型。如果客户机请求的类型是GET,则从请求信息中获取所要访问的HTML文件名。如果请求的HTML文件存在,则打开HTML文件,把HTTP头消息和HTML文件内容通过socket传回Web浏览器,然后关闭请求的文件。否则就会发送错误信息给Web浏览器;最后关闭与相应Web浏览器连接的socket字。WEB服务器的具体请求和回应实现主要功能代码public void StartListen()int iStartPos = 0;String sRequest;String sDirName;String sRequestedFile;String sErrorMessage;String sLocalDir;String sMyWebServerRoot = C:MyWebServerRoot;String sPhysicalFilePath = ;String sFormattedMessage = ;String sResponse = ;while(true)/接受一个新的连接Socket mySocket = myListener.AcceptSocket() ;Console.WriteLine (Socket Type + mySocket.SocketType ); if(mySocket.Connected)Console.WriteLine(nClient Connected!n=nCLient IP 0n, mySocket.RemoteEndPoint) ;/ 为了接受客户端的的数据建立一个字节缓冲区Byte bReceive = new Byte1024 ;int i = mySocket.Receive(bReceive,bReceive.Length,0) ;/ 将字节转化成字符串string sBuffer = Encoding.ASCII.GetString(bReceive);/ 处理客户端的请求if (sBuffer.Substring(0,3) != GET )Console.WriteLine(Only Get Method is supported.);mySocket.Close();return;/ 找到HTTP的具体请求iStartPos = sBuffer.IndexOf(HTTP,1);string sHttpVersion = sBuffer.Substring(iStartPos,8);/ 提取出请求所需的类型以及请求的文件和目录sRequest = sBuffer.Substring(0,iStartPos - 1);/如果有的话则替换反斜杠sRequest.Replace(,/);/ 找到我们寻找的目录和默认文件夹名if (sRequest.IndexOf(.) 1) & (!sRequest.EndsWith(/)sRequest = sRequest + /; / 得到请求的文件夹名iStartPos = sRequest.LastIndexOf(/) + 1;sRequestedFile = sRequest.Substring(iStartPos);/得到目录名sDirName = sRequest.Substring(sRequest.IndexOf(/), sRequest.LastIndexOf(/)-3);/ 确定实际目录if ( sDirName = /)sLocalDir = sMyWebServerRoot;elsesLocalDir = GetLocalPath(sMyWebServerRoot, sDirName);Console.WriteLine(Directory Requested : + sLocalDir);/ 如果实际目录不存在则提示错误if (sLocalDir.Length = 0 )sErrorMessage = Error! Requested Directory does not exists!;SendHeader(sHttpVersion, , sErrorMessage.Length, 404 Not Found, ref mySocket);/发送到浏览器SendToBrowser(sErrorMessage, ref mySocket);mySocket.Close();continue;一般说来,互联网上的所有计算机都

温馨提示

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

评论

0/150

提交评论