分布式系统实验报告.doc

上传人:桔**** 文档编号:521666033 上传时间:2023-05-03 格式:DOC 页数:32 大小:1.26MB
返回 下载 相关 举报
分布式系统实验报告.doc_第1页
第1页 / 共32页
分布式系统实验报告.doc_第2页
第2页 / 共32页
分布式系统实验报告.doc_第3页
第3页 / 共32页
分布式系统实验报告.doc_第4页
第4页 / 共32页
分布式系统实验报告.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《分布式系统实验报告.doc》由会员分享,可在线阅读,更多相关《分布式系统实验报告.doc(32页珍藏版)》请在金锄头文库上搜索。

1、中南大学分布式系统实验报告目录(我选做 4 题,按住ctrl点击目录条可直达,wps下有效)实验一 数据包 socket 应用3一、实验目的3二、预习与实验要求3三、实验环境3四、实验原理4五、实验内容5六、实验报告5七、思考题7实验二 流式 socket 应用8一、实验目的8二、预习与实验要求8三、实验环境8四、实验原理8五、实验内容8六、实验报告9七、思考题12实验三 客户/ 服务器应用开发12一、实验目的12二、预习与实验要求12三、实验环境12四、实验原理12五、实验内容13六、实验报告13实验 九 虚拟机的使用与 Linux 系统的安装30一、实验目的30二、实验内容和步骤30三、实

2、验结果32实验一 数据包 socket 应用一、实验目的1. 理解数据包 socket 的应用2. 实现数据包 socket 通信3. 了解 Java 并行编程的基本方法二、预习与实验要求1. 预习实验指导书及教材的有关内容,了解数据包 socket 的通信原理;2. 熟悉一种 java IDE 和程序开发过程;3. 了解下列 Java API:Thread、Runnable;4. 尽可能独立思考并完成实验。三、实验环境a) 独立计算机或计算机网络;b) Windows 操作系统。c) Jdk 工具包d) JCreator or others四、实验原理1. 分布式计算的核心是进程通信。操作系

3、统、网卡驱动程序等应用从不同抽象层面提供了对进程通信的支持,例如Winsock、.*。Socket API 是一种作为 IPC 提供对系统低层抽象的机制。尽管应用人员很少需要在该层编写代码,但理解 socket API 非常重要,因为:1,高层设施是构建于 socketAPI 之上的,即他们是利用 socket API 提供的操作来实现;2,对于以响应时间要求较高或运行于有限资源平台上的应用来说,socket API 可能是最适合的。在 Internet 网络协议体系结构中,传输层上有 UDP 和 TCP 两种主要协议,UDP 允许在传送层使用无连接通信传送,被传输报文称为数据包。(是否存在面

4、向连接的数据包socket?)因此数据包 socket 是基于 UDP 的不可靠 IPC。Java 为数据包 socket API 提供两个类:(1)针对 socket 的 datagramSocket 类(2)针对数据包交换的 datagramPacket 类希望使用该 API 发送和接收数据的进程须实例化一个 datagramSocket 对象,每个 socekt被绑定到该进程所在及其的某个 UDP 端口上。为了向其他进程发送数据包,进程必须创建一个代表数据包本身的对象。该对象通过实例化一个 datagram socket 对象创建。在接收者进程中,datagramPacket 对象也必须

5、被实例化并绑定到一个本地端口上,该端口必须与发送者数据包的定义一致。接收进程创建一个指向字节数组的 DatagramPacket,并调用 datagramSocket 对象的 receive 方法,将 DatagramPacket 对象指针作为参数定义。2. 并行编程(以 Java 为例 1 )一个线程是比进程更小的执行粒度。 Java 虚拟机允许应用程序有多个执行线程同时运行。有两种方法来创建一个新线程的执行。一个是声明一个类是一个线程的子类。这个子类应重写 Thread 类的 run 方法。一个子类的实例可以被分配和启动。另一种方法创建一个线程,并同时声明一个类实现了 Runnable 接

6、口(这个类要实现 run 方法)。一个类的实例可以被分配并作为参数传递给创建的线程,并启动线程。例如:u 创建一个类是 Thread 的子类:class SomeThread extends Thread SomeThread() public void run() . . .SomeThread p = new SomeThread();p.start();u 创建一个实现 Runnable 接口的类并传递给线程:class SomeRun implements Runnable SomeRun() public void run() . . .SomeRun p = new SomeRun

7、(143);new Thread(p).start();当一个实现 Runnable 接口的类被执行时,可以没有子类。实例化一个 Thread 实例,并通过自身作为目标线程。在大多数情况下,如果你只打算重写的 run()方法,并没有其它的线程方法,应使用 Runnable 接口。因为类不应该被继承,除非程序员有意修改或增强类的基本行为。五、实验内容1. 构建客户端程序(1) 构建 datagramSocket 对象实例(2) 构建 DatagramPacket 对象实例,并包含接收者主机地址、接收端口号等信息(3) 调用 datagramSocket 对象实例的 send 方法,将 Datag

8、ramPacket 对象实例作为参数发送。2. 构建服务器端程序(1) 构建 datagramSocket 对象实例,指定接收的端口号。(2) 构建 DatagramPacket 对象实例,用于重组接收到的消息。(3) 调用 datagramSocket 对象实例大家 receive 方法,进行消息接收,并将DatagramPacket 对象实例作为参数。六、实验报告1. 客户端和服务器端程序的伪代码;客户端:import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;

9、import java.util.Scanner;public class Client public static void main(String args) throws IOException / 创建一个客户端DatagramSocket,使用随机端口 DatagramSocket socket = new DatagramSocket(); / 初始化发送用的DatagramSocket,它包含一个长度为0的字节数组 DatagramPacket outPacket = new DatagramPacket(new byte0 , 0 , InetAddress.getByName

10、(127.0.0.1) , 30000); / 定义接收网络数据的字节数组 byte inBuff = new byte4096; DatagramPacket inPacket =new DatagramPacket(inBuff , inBuff.length); / 创建键盘输入流 Scanner scan = new Scanner(System.in); / 不断地读取键盘输入 while(scan.hasNextLine() / 将键盘输入的一行字符串转换成字节数组 byte buff = scan.nextLine().getBytes(); / 设置发送用的DatagramPa

11、cket中的字节数据 outPacket.setData(buff); / 发送数据报 socket.send(outPacket); / 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组中 socket.receive(inPacket); System.out.println(new String(inBuff , 0 , inPacket.getLength(); 服务端:import java.io.IOException;import .DatagramPacket;import .DatagramSocket;public class Services pu

12、blic static void main(String args) throws IOException / 定义接收网络数据的字节数组 byte inBuff = new byte4096; / 创建DatagramSocket对象 DatagramSocket socket = new DatagramSocket(30000); / 以指定字节数组创建准备接收数据的DatagramPacket对象 DatagramPacket inPacket = new DatagramPacket(inBuff , inBuff.length); String message=消息已经收到!; w

13、hile(true) socket.receive(inPacket); / 将接收到的内容转换成字符串后输出 System.out.println(new String(inBuff, 0 , inPacket.getLength(); / 从字符串数组中取出一个元素作为发送数据 byte sendData = message.getBytes(); / 以指定的字节数组作为发送数据,以刚接收到的DatagramPacket的 / 源SocketAddress作为目标SocketAddress创建DatagramPacket / 定义一个用于发送的DatagramPacket对象 DatagramPacket outPacket= new DatagramPacket(sendData

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 纺织服装

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号