《云南大学 软件学院 计网实.docx》由会员分享,可在线阅读,更多相关《云南大学 软件学院 计网实.docx(4页珍藏版)》请在三一办公上搜索。
1、云南大学 软件学院 计网实云南大学软件学院 实 验 报 告 课程: 计算机网络原理实验 任课教师: 姓名: 学号: 专业: 成绩: 实验四、web服务器套接字编程 1实验目的: 编写一个WEB服务器程序,可以接受来自浏览器的访问,并传输页面(包含多个对象)到浏览器。掌握Socket编程。 2实验环境: 连入局域网络的主机一台。 3实验指导: 超文本传输协议是位于TCP/IP 协议的应用层,是最广为人知的协议,也是互连网中最核心的协议之一。HTTP协议是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。 一个完整的HTTP协议会话过程包括四个步骤: 连接 Web浏览
2、器与Web服务器建立连接,打开一个称为Socket的虚拟文件,此文件的建立标志着连接建立成功; 请求 Web浏览器通过Socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令; 应答 Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面; 关闭连接 应答结束后Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。 4实验分析,回答下列问题。 运行实验提供的Webserver.java程序,分析该程序实现的功能,为实验程序主
3、要代码加上注释,并画出程序流程图。 代码参见中注释; 此程序运行后,每次只能访问一个网页对象,请修改完善程序,使Webserver.java程序能够将所有网页对象都返回给浏览器。提示:可参考使用while(true) 结构,选定合适的循环体来实现。 import java.io.*; import .*; import java.util.*; class Webserver public static void main(String arg) throws Exception String requestMessageLine; /请求信息串名 String filename; /定义文件
4、串名 ServerSocket listenSocket=new ServerSocket(6789); /设置端口号,依照实验要求,为6789 while(true) /循环执行请求报文语句 Socket connectionSocket=listenSocket.accept; /定义connectionSocket为监听函数 BufferedReader inFromClient=new BufferedReader(new InputStreamReader(connectionSocket.getInputStream); /定义inFromClient为新的读文件函数 DataOu
5、tputStream outToClient=new DataOutputStream(connectionSocket.getOutputStream); /定义给客户数据输出流函数outToClient requestMessageLine=inFromClient.readLine; /字段串解析 StringTokenizer tokenizerLine=new StringTokenizer(requestMessageLine); if(tokenizerLine.nextToken.equals(GET) /如果客户端的请求方式为get方式 filename=t
6、okenizerLine.nextToken; if(filename.startsWith(/)=true) filename=filename.substring(1); File file=new File(filename); int numOfBytes=(int)file.length; /新建文件输入流 FileInputStream inFile=new FileInputStream(filename); byte fileInBytes=new bytenumOfBytes;/将文件流信息读入byte数组 inFile.read(fileInBytes); outToCli
7、ent.writeBytes(HTTP/1.0 200 Document Followsrn);/不同的文件类型所对应的头文件格式不同 if(filename.endsWith(.jpg) outToClient.writeBytes(Content-Type:image/jpegrn); /读出图片文件 if(filename.endsWith(.gif) outToClient.writeBytes(Content-Type:image/gifrn); /读出图片文件 outToClient.writeBytes(Content-Length:+numOfBytes+rn); outToC
8、lient.writeBytes(rn); /换行回车 outToClient.write(fileInBytes,0,numOfBytes); connectionSocket.close; /关闭socket else System.out.println(Bad Resquest Message); /否则输出请求信息失败 实验截图: 注意事项:使用WEB浏览器来测试WEB服务器的程序,如果在本机上测试,本机服务器监听端口为6789,要获得本机上文件名为index.html,应在浏览器指定下列URL http:/localhost:6789/index.html;如果服务器程序不在本机上,服务器监听端口为6789,要获得服务器上文件名为index.html,应在浏览器指定下列URL http:/服务器IP地址:6789/index.html 四、实验总结 总结你在实验过程中遇到的问题和解决的方法。 实验中当再次运行时,发现图片都能显示出来,重复几次都是这样的。后来换了一个网页,图片不能显示,再运行,又能显示。才明白是浏览器本身的cookies造成的。删除掉这些记录后就无法显示图形了。通过本次实验,初步了解了web服务器套接字编程,也可以明白代码的意思,并可以改进代码来实现多文件的web文件读入。