首页 > 代码库 > 分布式计算(二)——Socket通讯与HTTP服务器(1)
分布式计算(二)——Socket通讯与HTTP服务器(1)
1.列出网络七层协议的名称,用一句话分别解释 传输层(TCP/UDP) 与 网络层(IP) 的功能。
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
TCP/UDP:提供主机应用程序进程之间的端到端的服务.
IP:实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。
2.Socket 在哪一层? 解释端口号的作用。
传输层。
端口为标识参与通信的主机、进程和连接提供了一种统一的、惟一的方法。
3.TCP 也称 流式 Socket。 与流式文件存在联系吗?
存在。
流式文件是指在网络中可以进行流式传输的多媒体文件的集合,是有序字符的集合,其长度为该文件所包含的字符个数。流式传输的实现需要合适的传输协议,在流式传输的实现方案中,一般采用HTTP/TCP来传输控制信息。
4.阅读图2-8,连接 Socket 和 数据 Socket 相同吗? 为什么编程时,我们通常只自定义 4 位数的端口号?
不同。
连接Socket是专门用于接收客户程序的连接请求。
数据Socket是与某一客户程序的虚拟连接通道,用于数据传输等。
大多数 TCP/IP 实现给临时端口分配 1024~5000 之间的端口号。大于 5000 的端口号是 为其他服务器预留的。
5.文档中提到工厂方法。请用 UML 图画出 InetAddress , Inet4Address 和 Inet3Address 三者关系。
6.对照图2.9,写出每个步骤的关键代码。
服务器侦听并等待连接:
ServerSocket listenSocket = new ServerSocket(Integer.parseInt(args[0]));
Socket socket = listenSocket.accept();
客户端请求连接:
Socket socket = new Socket(args[0], Integer.parseInt(args[1]));
打开输入输出流:
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader
(socket.getInputStream()));
关闭连接:
out.close();
in.close();
socket.close();
7.(!)修改 MTEchoServer, 用 java 的 List<> 对象管理客户端连接的服务线程。当连接断开后,服务线程只是挂起。在新连接请求时,如果有挂起的服务线程,直接为新连接服务。
8.写出 RFC 和 IETF 的全称。 给出 HTTP1.1 协议的 RFC 编号以及全文的网址。
RFC:Requests for Comments,Internet标准草案定义组织
IETF:Internet Engineering Task Group,Internet 工程任务组
HTTP1.1协议的RFC编号:2616
全文网址:http://www.ietf.org/rfc/rfc2616.txt
9.阅读 Daytime 协议开发, 简单解释图 2-11 的含义。它对程序阅读的作用。
MyStreamSocket继承Socket,并添加了setStreams()方法用于创建数据输入流与输出流。
sendMessage()方法用于发送数据;receiveMessage()方法用于接收数据。
DaytimeServer2使用了MyStreamSocket和ServerSocket。
DaytimeClient2使用了DaytimeClientHelper2。
DaytimeClientHelper2使用了MyStreamSocket。
10.编程序经常会编写 xxHelper 类,请描述 DaytimeTCP 程序中,DaytimeClientHelper2 类发挥的作用。
DaytimeClientHelper2 类的主要作用是管理 DaytimeClient2 类与服务器的通信,包括通过 MyStreamSocket 类与服务器建立连接,getTimestamp()方法向服务端发送请求并接收 响应消息,receiveMessage()方法接收服务端的响应消息等。
11.运行 java 版本 HttpServer。设计 3 个 curl 指令,测试程序的三种输出响应,给出控制台输入与输出。
运行HttpServer
使用命令curl localhost
curl –v localhost,显示通信过程
使用 curl –o [文件名][网址]保存网页源代码
个人学习小结
通过本次实验,初步掌握了 Socket API 的相关概念以及网络协议的基本概念。对流式 Socket 的使用,TCP,UDP 协议有初步的了解,以及 HTTP协议并通过样例程序简单实践了利用流式 Socket 建立 TCP 连接,搭建基本的C/S 网络框架,搭建多线程的服务器,以及 Daytime 协议的开发。
Socket API
Socket是物理网络地址和逻辑端口号的一个集合,通过这个集合可以向另外一 个位置的与它具有相同定义的Socket进行数据传输。由于Socket是由机器地址和端 口号来识别的,那么在一个特定的计算机网络上,每一个Socket都是以此方式被唯 一识别的。这就使得应用程序可以唯一被定位。套接字类型有二种:一个是流式 Socket,它提供进程之间的逻辑连接,并且支持可靠的数据交换;另一个就是数据 包Socket,它是无连接的并且不可靠
数据报 Socket
流式文件是指在网络中可以进行流式传输的多媒体文件的集合,是有序字符的集合,其长度为该文件所包含的字符个数。
流式 Socket
流式传输的实现需要合适的传输协议,在流式传输的实现方案中,一般采用HTTP/TCP来传输控制信息。
应用层协议开发
Daytime协议开发
日期查询协议(Daytime Protocol)是时间传输协议,被广泛的被运行 MS-DOS 和类似的 操作系统的小型计算机使用,该协议不指定固定的传输格式,只要求按照 ASCII 标准发送数 据。它的作用就是返回当前时间和日期,格式是字符串格式。此协议篇幅很小,容易让初学者 理解协议内容和开发过程
FTP协议开发
文件传输协议 FTP(File Transfer Protocol)是一个用于在两台装有不同操作系统的计算机 之间传输计算机文件的软件标准,工作于应用层。FTP 服务一般运行在 20 和 21 两个端口。端 口 20 用于在客户端和服务器之间传输数据流,而端口 21 用于传输控制流。当数据通过数据流 传输时,控制流处于空闲状态。
HTTP协议开发
超文本传输协议 HTTP(HyperText Transfer Protocol)是专门用于传输 HTML 文档的协 议,1996 年发布的 RFC 1945和 1999年发布的 RFC 2616分别定义了 HTTP/1.0 和 HTTP/1.1。 HTTP 协议采用典型的“请求-答复”通信模型:客户程序建立与服务程序的连接后,向服务 程序发送一个服务请求;服务程序根据请求获取相应的 HTML 文档作为答复送回客户程序, 最后关闭连接
分布式计算(二)——Socket通讯与HTTP服务器(1)