计网实验报告(一)
文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。
(3)应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。
原理示意图如下:
(四)实验步骤:
考虑利用java提供给TCP的端口和系统定义类进行传输实现,大致分为以下几步:
inputStream = new FileInputStream("C:/" + url);
OutputStream outputStream = socket.getOutputStream();
byte[] buffer = new byte[4 * 1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
java源代码:
//WebServer.class
import java.io.*;
import .*;
public class WebServer {
public static void main(String[] args) {
while (true) {
try {
ServerSocket welcomeSocket = new ServerSocket(7977);
inputStream.close();
inFromClient.close();
outputStream.close();
} catch (Exception e) {
}
}
}
}
(1)连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。
(2)请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:
GET路径/文件名HTTP/1.0
(5)从请求信息中获取请求类型。如果请求类型是GET,则从请求信息中获取所访问的HTML文件名index.html。
(6)如果HTML文件存在,则打开HTML文件,把HTTP头信息和HTML文件内容通过socket传回给Web浏览器,然后关闭文件。否则发送错误信息给Web浏览器;
(7)关闭与相应Web浏览器连接的socket字。
(五)实验结果:
在IE浏览器中输入网址:http://127.0.0.1:7977/index.html,console windows输出如下:
浏览器显示页面如下:
(六)问题总结:
1.初始阶段我是根据课本上给出的程序源码进行编写调试的,发现在命令行测试 ping对方ip显示连接成功,但作为客户端的主机无法正常加载存储在服务器主机的网页;经过仔细与正确运行代码的比对,我发现我给出的代码没有进行请求信息的提取和解析,所以没办法正常得到网页,由此,我得到的经验是不能单一依靠课本给出的参考代码,要自己仔细琢磨协议的流程和要求,掌握每一个步骤,才能准确地掌握实验内容,达到实验目的
(4)创建一个包括被请求的文件的http响应信息
(5)直接发送该信息到客户端
(三)实验原理:
HTTP协议的作用原理:
WWW是以Internet作为传输媒介的一个应用系统,WWW网上最基本的传输单位是Web网页。WWW的工作基于客户机/服务器计算模型,由Web浏览器(客户机)和Web服务器(服务器)构成,两者之间采用超文本传送协议(HTTP)进行通信。HTTP协议是基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层协议,是通用的、无状态的、面向对象的协议。HTTP协议的作用原理包括四个步骤:
outputStream.write(buffer, 0, len);
}
outputStream.flush();
System.out.println("网页传输成功");
welcomeSocket.close();//关闭相应资源
socket.shutdownInput();
socket.close();
BufferedReaderinFromClient =
new BufferedReader(new InputStreamReader(inputStream));
String line = inFromClient.readLine();
System.out.println(line);
String url = line.substring(5, line.indexOf("HTTP") - 1);
(1)创建ServerSocket类对象,监听端口7977。这是为了区别于HTTP的标准TCP/IP端口80而取的;
(2)等待、接受客户
(3)创建与socket字相关联的输入流instream和输出流outstream;
(4)从与socket关联的输入流instream中读取一行客户机提交的请求信息,请求信息的格式为:GET路径/文件名HTTP/1.0
//端口号7977,开启服务器socket
System.out.println("服务器成功启动,等待连接…….");
Socket socket = welcomeSocket.accept();//等待服务器连接
System.out.println("连接成功");
InputStream inputStream = socket.getInputStream(); //得到并解析request
计算机网络实验报告(一)
——Windows环境下用java实现web服务器
(一)实验目的:
通过本实验进一步理解HTTP协议的技术细节以及WEB服务器的实现原理并了解java提供的支持TCP协议的借口和类的使用。
(二)实验内容:
(1)处理一个http请求
(2)接收并解析http请求
(3)从服务器文件系统中获得被请求的文件
2.要注意端口号的选择,我在调试程序过24以前大多是一些已经占用的端口,用户定义时一般考虑1024-9999端口,若仍不确定,可在命令行敲入telnet查看当前占用的端口号,避开这些端口号,基本就可以避免这种报错。
(七)附录: