分布式系统试验报告_第1页
分布式系统试验报告_第2页
分布式系统试验报告_第3页
分布式系统试验报告_第4页
分布式系统试验报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、分布式系统实验报告 目录 (我选做 4 题,按住 ctrl 点击目录条可直达, wps下有效) 实验一 数据包 socket 应用 . 3 一、实验目的 . 3 二、预习与实验要求 . 3 三、实验环境 . 3 四、实验原理 . 3 五、实验内容 . 4 六、实验报告 . 5 七、思考题 . 5 实验二 流式 socket 应用 . 5 一、实验目的 . 5 二、预习与实验要求 . 5 三、实验环境 . 5 四、实验原理 . 6 五、实验内容 . 6 六、实验报告 . 6 七、思考题 . 7 实验三 客户 / 服务器应用开发 . 7 一、实验目的 . 7 二、预习与实验要求 . 7 三、实验环

2、境 . 7 四、实验原理 . 8 五、实验内容 . 8 六、实验报告 . 8 实验 九 虚拟机的使用与Linux 系统的安装 . 22 一、实验目的 . 22 二、实验内容和步骤. 22 三、实验结果 . 23 实验一 数据包 socket 应用 一、实验目的 1. 理解数据包 socket 的应用 2. 实现数据包 socket 通信 3. 了解 Java 并行编程的基本方法 二、预习与实验要求 1. 预习实验指导书及教材的有关内容,了解数据包 socket 的通信原理; 2. 熟悉一种 java IDE 和程序开发过程; 3. 了解下列 Java API : Thread 、 Runnab

3、le ; 4. 尽可能独立思考并完成实验。 三、实验环境 a)独立计算机或计算机网络; b)Windows 操作系统。 c)Jdk 工具包 d)JCreator or others 四、实验原理 1. 分布式计算的核心是进程通信。 操作系统、网卡驱动程序等应用从不同抽象层面提供了对进程通信的支持,例如 Winsock、.* 。Socket API 是一种作为 IPC 提供对系统低层抽象的机制。尽管应用人 员很少需要在该层编写代码,但理解 socket API 非常重要,因为: 1,高层设施是构建于 socket API 之上的,即他们是利用 socket API 提供的操作来实现; 2,对于以

4、响应时间要求较高 或 运行于有限资源平台上的应用来说, socket API 可能是最适合的。 在 Internet 网络协议体系结构中,传输层上有 UDP 和 TCP 两种主要协议, UDP 允许在 传送层使用无连接通信传送,被传输报文称为数据包。 (是否存在面向连接的数据包 socket ?)因此数据包 socket 是基于 UDP 的不可靠 IPC 。Java 为数据包 socket API 提 供两个类: ( 1)针对 socket 的 datagramSocket 类 ( 2)针对数据包交换的 datagramPacket 类 希望使用该 API 发送和接收数据的进程须实例化一个 d

5、atagramSocket 对象,每个 socekt 被绑定到该进程所在及其的某个 UDP 端口上。为了向其他进程发送数据包,进程必须创建 一个代表数据包本身的对象。该对象通过实例化一个datagram socket 对象创建。 在接收者进程中, datagramPacket 对象也必须被实例化并绑定到一个本地端口上,该端 口必须与发送者数据包的定义一致。接收进程创建一个指向字节数组的 DatagramPacket , 并 调用 datagramSocket 对象的 receive 方法,将 DatagramPacket 对象指针作为参数定义。 2. 并行编程(以 Java 为例 1 ) 一个

6、线程是比进程更小的执行粒度。 Java 虚拟机允许应用程序有多个执行线程同时运 行。有两种方法来创建一个新线程的执行。 一个是声明一个类是一个线程的子类。 这个子类 应重写 Thread 类的 run 方法。一个子类的实例可以被分配和启动。另一种方法创建一个 线 程,并同时声明一个类实现了 Runnable 接口(这个类要实现 run 方法)。一个类的实例可 以 被分配并作为参数传递给创建的线程,并启动线程。例如: 创建一个类是 Thread 的子类: class SomeThread extends Thread SomeThread() public void run() SomeThre

7、ad p = new SomeThread(); (); 创建一个实现 Runnable 接口的类并传递给线程: class SomeRun implements Runnable SomeRun() public void run() SomeRun p = new SomeRun(143); new Thread(p).start(); 当一个实现 Runnable 接口的类被执行时,可以没有子类。实例化一个 Thread 实例,并 通过自身作为目标线程。在大多数情况下,如果你只打算重写的 run ()方法,并没有其它 的线程方法, 应使用 Runnable 接口。 因为类不应该被继承,

8、除非程序员有意修改或增强类 的基本行为。 五、实验内容 1. 构建客户端程序 ( 1) 构建 datagramSocket 对象实例 ( 2) 构建 DatagramPacket 对象实例,并包含接收者主机地址、接收端口号等信息 (3) 调用 datagramSocket 对象实例的 send 方法, 将 DatagramPacket 对象实例作为参 数发送。 2. 构建服务器端程序 1) 构建 datagramSocket 2) 构建 DatagramPacket 3) 调用 datagramSocket 对象实例,指定接收的端口号。 对象实例,用于重组接收到的消息。 对象实例大家 rece

9、ive 方法,进行消息接收,并将 DatagramPacket 对象实例作为参数。 六、实验报告 1. 客户端和服务器端程序的伪代码; 客户端: import class Client public static void main(String args) throws IOException etBytes(); 如何避免数据包丢失而造成的无限等待问题? 答:我认为可在发包时设定一个定时器, 若发出去的包在一定时间内没有收到答应, 则再发 一次。为了避免接受者接到重复的包, 可以给数据包加个序号, 接受者收包时查看序号即可。 2. 如何实现全双工的数据包通信? 答:利用端口套接字之间的通信

10、功能。 实验二 流式 socket 应用 一、实验目的 1. 理解流式 socket 的原理 2. 实现流式 socket 通信 二、预习与实验要求 1. 预习实验指导书及教材的有关内容,了解流式 socket 的通信原理; 2. 熟悉 java 环境和程序开发过程; 3. 尽可能独立思考并完成实验。 三、实验环境 a) 独立计算机; b) Windows 操作系统 ; c) Jdk 工具包 四、实验原理 Socket API 是一种作为 IPC 提供低层抽象的机制。尽管应用人员很少需要在该层编写代 码,但理解 socket API 非常重要,因为: 1,高层设施是构建于 socket API

11、 之上的,即 他们 是利用 socket API 提供的操作来实现; 2,对于以响应时间要求较高或运行于有限资源平 台 上的应用来说, socket API 可能是最适合的。 在 Internet 网络协议体系结构中,传输层上有 UDP 和 TCP 两种主要协议, UDP 允许使 用无连接通信传送, 被传输报文称为数据包。 而 TCP 则允许面向连接的可靠通信, 这种 IPC 称为流式 socket 。Java 为流式 socket API 提供两类 socket ( 1)式用于连接的连接 socket ( 2)式用于数据交换的数据 socket 。 五、实验内容 1. 构建客户端程序和服务器

12、端程序都需要的 MystreamSocket 类,定义继承自 java Socket 的 sendMessage 和 receiveMessage 方法 2. 构建客户端程序 ( 1) 创建一个 MyStreamsocket 的实例对象,并将其指定接收服务器和端口号 ( 2) 调用该 socket 的 receiveMessage 方法读取从服务器端获得的消息 3. 构建服务器端程序 ( 1) 构建连接 socket 实例,并与指定的端口号绑定,该连接 socket 随时侦听客户 端的连接请求 ( 2) 创建一个 MyStreamsocket 的实例对象 ( 3) 调用 MyStreamsoc

13、ket 的实例对象的 sendMessage 方法,进行消息反馈。 六、实验报告 1. 应用程序的结构图,说明程序之间的关系; 2. 程序的伪代码。 公用服务功能: import .*; import .*; public class MystreamSocket extends Socket private Socket socket; private BufferedReader input; private PrintWriter output; ava : import class Client public static void main(String args) try Inet

14、Address hostname=(localhost); MystreamSocket mss=new MystreamSocket(hostname,12345); ( 我是客户端,我请求连接! ); (); catch (IOException e) tart(); catch (IOException e) 如何实现全双工的流式 socket 通信? 答:服务端监听端口,每当有一个连接请求发来时,就与其建立新的连接, 然后利用其提供 的功能进行通信。 2. 如何实现安全 socket API ? 答:注意在通信过程中的各种异常情况的捕获与处理。 3. 如何实现 1 对多的并发? 答:在

15、服务端使用多线程。 实验三 客户 / 服务器应用开发 一、实验目的 1. 验证 daytime 和 echo 程序, 2. 实现包 socket 支撑的 C/S 模式 IPC 机制 3. 实现流式 socket 支撑的 C/S 模式 IPC 机制 二、预习与实验要求 1. 预习实验指导书及教材的有关内容,了解 daytime 和 echo 要提供的具体服务内容; 2. 复习包 socket 和流式 socket 的实现原理; 3. 实验前认真听讲,服从安排。尽可能独立思考并完成实验。 三、实验环境 a) 独立计算机; b)Windows 操作系统。 c)Jdk 工具包 四、实验原理 C/S 模

16、式是主要的分布式应用范型,其设计的目的是提供网络服务。网络服务指如 daytime 、 telnet 、ftp 和 WWW之 类的允许网络用户共享资源的服务。要构建C/S 范型的 应用就必须解决以下一些关键问题: (1)如何通过会话实现多个用户的并发问题 (2)如何定义客户和服务器在服务会话期间必须遵守的协议 (3)服务定位问题 (4)进程间通信和事件同步问题:语法、语义和响应 (5)数据表示问题 在解决了这些问题的基础上, C/S 范型必须遵从 3 层结构的软件体系结构: (1)表示层,提供与客户端进行交互的界面 (2)应用逻辑层,定义服务器和客户端要处理的主要事务的业务逻辑 (3)服务层,

17、定义应用逻辑层所需要的底层支持技术,例如定义其IPC 机制里的 receive 方法和 send 方法等。 五、实验内容 1. 构建用数据包 socket 实现的 daytime 客户端程序 (1)构建表示层程序 (2)构建应用逻辑层程序 (3)构建服务层程序 2. 构建用数据包 socket 实现的 daytime 服务器端程序 (1)构建表示层和应用逻辑层程序 (2)构建服务层程序 (3)构 建 服 务 层 程 序 所 需 要 的 下 层 程 序 (它封装了客户端的消息和地址) 3. 构建用流式 socket 实现的 daytime 应用程序包 4. 构建用数据包 socket 实现的 e

18、cho 应用程序包 5. 构建用流式 socket 实现的 echo 应用程序包 六、实验报告 1. 用数据包 socket 实现的 daytime 应用程序包的构架,列明各程序之间的关系; 客户端: 服务端: 代码: 客户端: import .*; public class DaytimeClient1 public static void main(String args) InputStreamReader is = new InputStreamReader; BufferedReader br = new BufferedReader(is); try Welcome to the

19、Daytime client.n + What is the name of the server host); String hostName = (); if () = 0) hostName = localhost; public class DaytimeClientHelper1 public static String getTimestamp(String hostName, String portNum) String timestamp = ; try InetAddress serverHost = (hostName); int serverPort = (portNum

20、); import .*; public class MyClientDatagramSocket extends DatagramSocket static final int MAX_LEN = 100; MyClientDatagramSocket() throws SocketException super(); MyClientDatagramSocket(int portNo) throws SocketException super(portNo); public void sendMessage(InetAddress receiverHost, int receiverPor

21、t, String message) throws IOException byte sendBuffer (); DatagramPacket datagram = new DatagramPacket(sendBuffer, , receiverHos t, receiverPort); (datagram); public String receiveMessage() throws IOException byte receiveBuffer = new byteMAX_LEN; DatagramPacket datagram = new DatagramPacket(receiveB

22、uffer, MAX_LEN); (datagram); String message = new String(receiveBuffer); return message; 服务端: import .*; import public class DaytimeServer1 public static void main(String args) int serverPort = 13; if = 1 ) serverPort = (args0); try new MyServerDatagramSocket mySocket MyServerDatagramSocket(serverPo

23、rt); Daytime server ready.); while (true) DatagramMessage request = (); Request received); Date timestamp = new Date (); timestamp sent: + (); (), (), (); catch (Exception ex) There is a problem: + ex); import .*; import .*; public class MyServerDatagramSocket extends DatagramSocket static final int

24、 MAX_LEN = 100; MyServerDatagramSocket(int portNo) throws SocketException super(portNo); public void sendMessage(InetAddress receiverHost, int receiverPort, String message) throws IOException byte sendBuffer (); DatagramPacket datagram = new DatagramPacket(sendBuffer, , receiverHost, receiverPort);

25、(datagram); public String receiveMessage() throws IOException byte receiveBuffer = new byteMAX_LEN; DatagramPacket datagram = new DatagramPacket(receiveBuffer, MAX_LEN); (datagram); String message = new String(receiveBuffer); return message; public DatagramMessage receiveMessageAndSender() throws IO

26、Exception byte receiveBuffer = new byteMAX_LEN; DatagramPacket datagram = new DatagramPacket(receiveBuffer, MAX_LEN); (datagram); DatagramMessage returnVal = new DatagramMessage(); (new String(receiveBuffer), (), (); return returnVal; import .*; public class DatagramMessage private String message; p

27、rivate InetAddress senderAddress; private int senderPort; public void putVal(String message, InetAddress addr, int port) = message; = addr; = port; public String getMessage() return ; public InetAddress getAddress() return ; public int getPort() return ; 2. 用流式 socket 实现的 daytime 应用程序包的构架,列明各程序之间的关系

28、; 客户端: 服务端: 共有的: import .*; import .*; public class MyStreamSocket extends Socket private Socket socket; private BufferedReader input; private PrintWriter output; MyStreamSocket(InetAddress acceptorHost, int acceptorPort ) throws SocketException, IOException socket = new Socket(acceptorHost, accepto

29、rPort ); setStreams(); MyStreamSocket(Socket socket) throws IOException = socket; setStreams(); private void setStreams() throws IOException InputStream inStream = (); input = new BufferedReader(new InputStreamReader(inStream); OutputStream outStream = (); output = new PrintWriter(new OutputStreamWr

30、iter(outStream); public void sendMessage(String message) throws IOException (message); (); public String receiveMessage() throws IOException String message = (); return message; 客户端: import .*; public class DaytimeClient2 public static void main(String args) InputStreamReader is = new InputStreamRea

31、der; BufferedReader br = new BufferedReader(is); try Welcome to the Daytime client.n + What is the name of the server host); String hostName = (); if () = 0) hostName = localhost; What is the port number of the server host); String portNum = (); if () = 0) portNum = 13; Here is the timestamp receive

32、d from the server + (hostName, portNum); catch (Exception ex) (); import .*; public class DaytimeClientHelper2 public static String getTimestamp(String hostName, String portNum) throws Exception String timestamp = ; InetAddress serverHost = (hostName); int serverPort = (portNum); Connection request

33、made); MyStreamSocket mySocket = new MyStreamSocket(serverHost, serverPort); timestamp = (); (); return timestamp; 服务端: import .*; import .*; import public class DaytimeServer2 public static void main(String args) int serverPort = 13; if = 1 ) serverPort = (args0); try ServerSocket myConnectionSocke

34、t = new ServerSocket(serverPort); Daytime server ready.); while (true) Waiting for a connection.); MyStreamSocket myDataSocket = new MyStreamSocket (); A client has made connection.); Date timestamp = new Date (); timestamp sent: + (); (); (); catch (Exception ex) (); 3. 用数据包 socket 实现的 echo 应用程序包的构

35、架,列明各程序之间的关系; 客户端: import .*; public class EchoClient1 static final String endMessage = .; public static void main(String args) InputStreamReader is = new InputStreamReader; BufferedReader br = new BufferedReader(is); try Welcome to the Echo client.n + What is the name of the server host); String ho

36、stName = (); if () = 0) hostName = localhost; What is the port number of the server host); String portNum = (); if () = 0) portNum = 7777; EchoClientHelper1 helper = new EchoClientHelper1(hostName, portNum); boolean done = false; String message, echo; while (!done) Enter a line to receive an echo ba

37、ck from the server, + or a single peroid to quit.); message = (); if ().equals (endMessage) done = true; (); else echo = ( message); catch (Exception ex) (); import .*; import .*; public class EchoClientHelper1 private MyClientDatagramSocket mySocket; private InetAddress serverHost; private int serv

38、erPort; EchoClientHelper1(String hostName, String portNum) throws SocketException, UnknownHostException = (hostName); = (portNum); = new MyClientDatagramSocket(); public String getEcho( String message) throws SocketException, IOException String echo = ; ( serverHost, serverPort, message); echo = ();

39、 return echo; public void done() throws SocketException (); import .*; import .*; public class MyClientDatagramSocket extends DatagramSocket static final int MAX_LEN = 100; MyClientDatagramSocket() throws SocketException super(); MyClientDatagramSocket(int portNo) throws SocketException super(portNo

40、); public void sendMessage(InetAddress receiverHost, int receiverPort, String message) throws IOException byte sendBuffer (); DatagramPacket datagram = new DatagramPacket(sendBuffer, , receiverHos t, receiverPort); (datagram); public String receiveMessage() throws IOException byte receiveBuffer = ne

41、w byteMAX_LEN; DatagramPacket datagram = new DatagramPacket(receiveBuffer, MAX_LEN); (datagram); String message = new String(receiveBuffer); return message; 服务端:import .*; public class EchoServer1 public static void main(String args) int serverPort = 1117; if = 1 ) serverPort = (args0); try MyServer

42、DatagramSocket mySocket MyServerDatagramSocket(serverPort); Echo server ready.); while (true) DatagramMessage request = (); Request received); String message = (); message received: + message); (), (), message); catch (Exception ex) (); import .*; import .*; public class MyServerDatagramSocket exten

43、ds DatagramSocket static final int MAX_LEN = 100; MyServerDatagramSocket(int portNo) throws SocketException super(portNo); public void sendMessage(InetAddress receiverHost, int receiverPort, String message) throws IOException byte sendBuffer (); DatagramPacket datagram = new DatagramPacket(sendBuffe

44、r, , receiverPort); (datagram); new receiverHost, public String receiveMessage() throws IOException byte receiveBuffer = new byteMAX_LEN; DatagramPacket datagram = new DatagramPacket(receiveBuffer, MAX_LEN); (datagram); String message = new String(receiveBuffer); return message; public DatagramMessa

45、ge receiveMessageAndSender() throws IOException byte receiveBuffer = new byteMAX_LEN; DatagramPacket datagram = new DatagramPacket(receiveBuffer, MAX_LEN); (datagram); DatagramMessage returnVal = new DatagramMessage(); (new String(receiveBuffer), (), (); return returnVal; import .*; public class Dat

46、agramMessage private String message; private InetAddress senderAddress; private int senderPort; public void putVal(String message, InetAddress addr, int port) = message; = addr; = port; public String getMessage() return ; public InetAddress getAddress() return ; public int getPort() return ; 4. 用流式

47、socket 实现的 echo 应用程序包的构架,列明各程序之间的关系。 共有的: import .*; import .*; public class MyStreamSocket extends Socket private Socket socket; private BufferedReader input; private PrintWriter output; MyStreamSocket(InetAddress acceptorHost, int acceptorPort ) throws SocketException, IOException socket = new Soc

48、ket(acceptorHost, acceptorPort ); setStreams(); MyStreamSocket(Socket socket) throws IOException = socket; setStreams(); private void setStreams() throws IOException InputStream inStream = (); input = new BufferedReader(new InputStreamReader(inStream); OutputStream outStream = (); output = new Print

49、Writer(new OutputStreamWriter(outStream); public void sendMessage(String message) throws IOException (message); (); public String receiveMessage() throws IOException String message = (); return message; 客户端: import .*; public class EchoClient2 static f?inal String endMessage = .; public static void

50、main(String args) InputStreamReader is = new InputStreamReader; BufferedReader br = new BufferedReader(is); try Welcome to the Echo client.n + What is the name of the server host?); String hostName = (); if () = 0) hostName = localhost; What is the port number of the server host?); String portNum =

51、(); if () = 0) portNum = 7; EchoClientHelper2 helper = new EchoClientHelper2(hostName, portNum); boolean done = false; String message, echo; while (!done) Enter a line to receive an echo + from the server, or a single period to quit.); message = (); if ().equals (endMessage) done = true; (); else ec

52、ho = ( message); catch (Exception ex) (); import .*; import .*; public class EchoClientHelper2 static f?inal String endMessage = .; private MyStreamSocket mySocket; private InetAddress serverHost; private int serverPort; EchoClientHelper2(String hostName,String portNum) throws SocketException,UnknownHo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论