分布式计算——Socket通讯与HTTP服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式计算——Socket通讯与HTTP服务器相关的知识,希望对你有一定的参考价值。

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 的使用,TCPUDP 协议有初步的了解,以及 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协议开发

文件传输协议 FTPFile Transfer Protocol)是一个用于在两台装有不同操作系统的计算机 之间传输计算机文件的软件标准,工作于应用层。FTP 服务一般运行在 20 21 两个端口。端 口 20 用于在客户端和服务器之间传输数据流,而端口 21 用于传输控制流。当数据通过数据流 传输时,控制流处于空闲状态。

 HTTP协议开发

超文本传输协议 HTTPHyperText Transfer Protocol)是专门用于传输 html 文档的协 议,1996 年发布的 RFC 19451999年发布的 RFC 2616分别定义了 HTTP/1.0 HTTP/1.1HTTP 协议采用典型的“请求-答复”通信模型:客户程序建立与服务程序的连接后,向服务 程序发送一个服务请求;服务程序根据请求获取相应的 HTML 文档作为答复送回客户程序, 最后关闭连接

以上是关于分布式计算——Socket通讯与HTTP服务器的主要内容,如果未能解决你的问题,请参考以下文章

分布式计算——Socket通讯与HTTP服务器

Hessian原理分析

分布式通信-tcp/ip socket

C# 编写WCF简单的服务端与客户端

分布式之Zookeeper使用

1.4分布式-通讯协议TCP/IP