多线程web服务器_第1页
多线程web服务器_第2页
多线程web服务器_第3页
多线程web服务器_第4页
多线程web服务器_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE1计算机网络实验报告题目:多线程Web服务器学生姓名及学号全东方0943111168 何智钊0943111272 李响0943111008 吴康0943111064指导教师陈黎评阅成绩评阅意见2011年05月28日目录:一.实验名称 3二. 实验目的及要求 32.1. 实验目的 32.2. 实验要求 3三. 实验环境 3四.实验原理…………………….34.1.HTTP协议的作用原理……………...34.2.Socket简介…………...44.3.设计原理……4五. 设计思路及步骤…………..45.1.主线程设计 45.2.连接处理分线程设计 45.3.处理信息的接收和发送 5六.调试过程及实验结果…………………..66.1.显示结果………….66.2.运行实例………….6七.总结……………………..8八.参考文献……………………..8一、实验名称多线程Web服务器二、实验目的及要求2.1目的掌握套接字编程技术,了解并运用http协议的作用原理,实现多线程web服务器设计,它能并行服务于多个请求。2.2要求用java语言开发一个多线程的web服务器,能并行服务于多个请求三、实验环境eclipseWindowsxpIE8.0四、实验原理4.1HTTP协议的作用原理www的工作基于客户机/服务器计算模型,由Web浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信,HTTP协议的作用原理包括四个步骤:连接,请求,应答。(1)连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。(2)请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:GET路径/文件名HTTP/1.1文件名指出所访问的文件,HTTP/1.1指出Web浏览器使用的HTTP版本。(3)应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。为了告知Web浏览器传送内容的类型,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。(4)关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。4.2套接字(Socket)简介Java软件包内在支持的网络协议为TCP/IP,也是当今最流行的广域网/局域网协议。Java有关网络的类及接口定义在包中。客户端软件通常使用包中的核心类Socket与服务器的某个端口建立连接,而服务器程序不同于客户机,它需要初始化一个端口进行监听,遇到连接呼叫,才与相应的客户机建立连接。J包的ServerSocket类包含了编写服务器系统所需的一切。下面给出ServerSocket类的部分定义。publicclassServerSocket{publicServerSocket(intport)throwsIOException;publicSocketaccept()throwsIOException;publicInetAddressgetInetAddress();publicintgetLocalPort();publicvoidclose()throwsIOException;publicsynchronizedvoidsetSoTimeout(inttimeout)throwsSocketException;publicsynchronizedintgetSoTimeout()throwsIOException;}4.3设计原理编写一个方法对用户所发送的信息进行处理,创建线程对多个需求分别进行响应。五、设计思路及步骤

5.1主线程设计主线程的设计就是在主线程WebServer类中实现了服务器端口的侦听,服务器接受一个客户端请求之后创建一个线程实例处理请求,代码如下:publicfinalclassWebServer{publicstaticvoidmain(Stringargv[])throwsException{intport=123;ServerSocketserverSocket=newServerSocket(port);while(true){Socketsocket=serverSocket.accept();HttpRequestrequest=newHttpRequest(socket);Threadthread=newThread(request);thread.start();}}}5.2连接处理分线程设计在分线程HttpRequest类中实现了HTTP协议的处理,这个类实现了Runnable接口,代码如下:finalclassHttpRequestimplementsRunnable{finalstaticStringCRLF="\r\n";Socketsocket;//构造函数publicHttpRequest(Socketsocket)throwsException{this.socket=socket;}publicvoidrun(){try{processRequest();}catch(Exceptione){System.out.println(e);}}5.3构建processRequest()方法来处理信息的接收和发送作为实现Runnable接口的主要内容,在run()方法中调用processRequest()方法来处理客户请求内容的接收和服务器返回信息的发送,代码如下:privatevoidprocessRequest()throwsException{InputStreamis=this.socket.getInputStream();DataOutputStreamos=newDataOutputStream(this.socket.getOutputStream());//建立输入文件流BufferedReaderbr=newBufferedReader(newInputStreamReader(is));//获取http需求报文StringrequestLine=br.readLine();//显示报文System.out.println();System.out.println(requestLine);//显示headerlineStringheaderLine=null;while((headerLine=br.readLine()).length()!=0){System.out.println(headerLine);}StringTokenizertokens=newStringTokenizer(requestLine);tokens.nextToken();StringfileName=tokens.nextToken();fileName="."+fileName;//打开要求文件FileInputStreamfis=null;booleanfileExists=true;try{fis=newFileInputStream(fileName);}catch(FileNotFoundExceptione){fileExists=false;}//建立响应报文StringstatusLine=null;StringcontentTypeLine=null;StringentityBody=null;if(fileExists){statusLine="HTTP/1.0200OK"+CRLF;contentTypeLine="Content-type:"+contentType(fileName)+CRLF;}else{statusLine="HTTP/1.0404NotFound"+CRLF;contentTypeLine="Content-type:text/html"+CRLF;entityBody="<html>"+"<head><title>NotFound</title></head>"+"<body>NotFound</body></html>";}//发送statuslineos.writeBytes(statusLine);//发送contenttypeline.os.writeBytes(contentTypeLine);os.writeBytes(CRLF);if(fileExists){sendBytes(fis,os);fis.close();}else{os.writeBytes(entityBody);}os.close();is.close();br.close();socket.close();}privatestaticvoidsendBytes(FileInputStreamfis,OutputStreamos)throwsException{byte[]buffer=newbyte[1024];intbytes=0;while((bytes=fis.read(buffer))!=-1){os.write(buffer,0,bytes);}}privatestaticStringcontentType(StringfileName){if(fileName.endsWith(".htm")||fileName.endsWith(".html")){return"text/html";}if(fileName.endsWith(".gif")){return"image/gif";}if(fileName.endsWith(".jpg")){return"image/jpeg";}return"application/octet-stream";}}六、调试过程及实验结果6.1显示结果显示的消息如下:GET/test.htmlHTTP/1.1Accept:*/*Accept-Language:zh-cnUser-Agent:Mozilla/4.0(compatible;MSIE8.

温馨提示

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

评论

0/150

提交评论