云南大学软件学院计算机网络原理实验四_计算机网络原理实验
云南大学软件学院计算机网络原理实验四由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“计算机网络原理实验”。
实验
四、web服务器套接字编程实验指导
1.实验目的:
编写一个WEB服务器程序,可以接受来自浏览器的访问,并传输页面(包含多个对象)到浏览器。掌握Socket编程。2.实验环境:
连入局域网络的主机一台。3.实验指导:
超文本传输协议(HTTP)是位于TCP/IP 协议的应用层,是最广为人知的协议,也是互连网中最核心的协议之一。HTTP协议是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。
一个完整的HTTP协议会话过程包括四个步骤:
连接
Web浏览器与Web服务器建立连接,打开一个称为Socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功; 请求
Web浏览器通过Socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递); 应答
Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面; 关闭连接
应答结束后Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。
4.实验分析,回答下列问题。
运行课本中Webserver.java程序。查找资料,写出程序源代码,并加上必要的注释。如能改写该程序,附上修改后的源代码。附上运行的截图。
代码及注释如下:
import java.io.*;//引入Java输入输出包 import java.net.*;//引入Java网络包 import java.util.*;//导入Java实用工具库 cla Webserver{ public static void main(String arg[])throws Exception{ String requestMeageLine;String filename;//创建一个监听socket ServerSocket listenSocket=new ServerSocket(6789);//等待客户机发起连接 while(1==1){
Socket connectionSocket=listenSocket.accept();//创建一个从socket中读文本行的流 BufferedReader inFromClient=new
BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));//创建一个向socket中写文本行的流 DataOutputStream outToClient=new
DataOutputStream(connectionSocket.getOutputStream());//读取客户机发送的一行文本requestMeageLine=inFromClient.readLine();//字段串解析
StringTokenizer tokenizerLine=new StringTokenizer(requestMeageLine);//如果客户端的请求方式为get方式
if(tokenizerLine.nextToken().equals(“GET”)){ filename=tokenizerLine.nextToken();//获得文件名
if(filename.startsWith(“/”)==true)
filename=filename.substring(1);//新建文件
System.out.println(“The request filename is:” + filename);//输出字符串,内容为客户端请求的文件名
File file=new File(filename);int numOfBytes=(int)file.length();//新建文件输入流
FileInputStream inFile=new FileInputStream(filename);byte[] fileInBytes=new byte[numOfBytes];//将文件流信息读入byte数组 inFile.read(fileInBytes);// 服务端输出信息
outToClient.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”);
outToClient.writeBytes(“rn”);
outToClient.write(fileInBytes,0,numOfBytes);
connectionSocket.close();
} //错误的请求方式
else System.out.println(“Bad Resquest Meage”);} } 实验结果截图如下:
实验四为JAVA的编程实验,实验代码已经提供,大家只需要读懂此程序,运行此程序查看结果,或做稍加修改就可以了。客户端的程序不用编写,只需要用浏览器做为客户端程序,向给定的服务器程序索取网页就可以了,大家可以事先先下载一个网页把它存放在和服务器程序同一个文件夹下即可,浏览器地址栏输入按照实验提示来做:使用WEB浏览器来测试WEB服务器的程序,如果在本机上测试,本机服务器监听端口为6789,要获得本机上文件名为index.html,应在浏览器指定下列URL http://localhost:6789/index.html;如果服务器程序不在本机上,服务器监听端口为6789,要获得服务器上文件名为index.html,应在浏览器指定下列URL http://服务器IP地址:6789/index.html。检查浏览器中输入的端口号是否和服务器监听的端口号一致。不一致要进行修改。
四、实验总结
总结你在实验过程中遇到的问题和解决的方法。
这次实验做的比较慢,在webserver程序的运行上遇到了比较大的困难,由于第一次接触java,对于java的运行并不清楚,一开始就不知道用什么编译器编译,在网上查找后,找到了合适的编译器,之后又出现了编译错误的情况,如下图:
由于无法加载,服务器程序一直运行不成功,后来通过网络查找才发现,java程序运行前必须进行编译,生成一个cla后缀的文件才行,最终运行成功,通过浏览器找到预先的存储的网页。
这次实验比较好的是在jdk的安装和设置环境变量的时候比较熟练,得益于第一次综合技能时间做的比较好,所以这次在配置java环境是比较顺利。