分布式系统实验报告.doc

上传人:b****9 文档编号:144425 上传时间:2022-10-04 格式: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》由会员分享,可在线阅读,更多相关《分布式系统实验报告.doc(32页珍藏版)》请在冰豆网上搜索。

分布式系统实验报告.doc

中南大学

分布式系统实验报告

目录

(我选做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

三、实验结果 32

实验一数据包socket应用

一、实验目的

1.理解数据包socket的应用

2.实现数据包socket通信

3.了解Java并行编程的基本方法

二、预习与实验要求

1.预习实验指导书及教材的有关内容,了解数据包socket的通信原理;

2.熟悉一种javaIDE和程序开发过程;

3.了解下列JavaAPI:

Thread、Runnable;

4.尽可能独立思考并完成实验。

三、实验环境

a)独立计算机或计算机网络;

b)Windows操作系统。

c)Jdk工具包

d)JCreatororothers

四、实验原理

1.分布式计算的核心是进程通信。

操作系统、网卡驱动程序等应用从不同抽象层面提供了对进程通信的支持,例如

Winsock、.*。

SocketAPI是一种作为IPC提供对系统低层抽象的机制。

尽管应用人

员很少需要在该层编写代码,但理解socketAPI非常重要,因为:

1,高层设施是构建于socket

API之上的,即他们是利用socketAPI提供的操作来实现;2,对于以响应时间要求较高或

运行于有限资源平台上的应用来说,socketAPI可能是最适合的。

在Internet网络协议体系结构中,传输层上有UDP和TCP两种主要协议,UDP允许在

传送层使用无连接通信传送,被传输报文称为数据包。

(是否存在面向连接的数据包

socket?

)因此数据包socket是基于UDP的不可靠IPC。

Java为数据包socketAPI提供两个类:

(1)针对socket的datagramSocket类

(2)针对数据包交换的datagramPacket类

希望使用该API发送和接收数据的进程须实例化一个datagramSocket对象,每个socekt

被绑定到该进程所在及其的某个UDP端口上。

为了向其他进程发送数据包,进程必须创建

一个代表数据包本身的对象。

该对象通过实例化一个datagramsocket对象创建。

在接收者进程中,datagramPacket对象也必须被实例化并绑定到一个本地端口上,该端

口必须与发送者数据包的定义一致。

接收进程创建一个指向字节数组的DatagramPacket,并

调用datagramSocket对象的receive方法,将DatagramPacket对象指针作为参数定义。

2.并行编程(以Java为例1)

一个线程是比进程更小的执行粒度。

Java虚拟机允许应用程序有多个执行线程同时运

行。

有两种方法来创建一个新线程的执行。

一个是声明一个类是一个线程的子类。

这个子类

应重写Thread类的run方法。

一个子类的实例可以被分配和启动。

另一种方法创建一个线

程,并同时声明一个类实现了Runnable接口(这个类要实现run方法)。

一个类的实例可以

被分配并作为参数传递给创建的线程,并启动线程。

例如:

u创建一个类是Thread的子类:

classSomeThreadextendsThread{

SomeThread(){

}

publicvoidrun(){

...

}

}

SomeThreadp=newSomeThread();

p.start();

u创建一个实现Runnable接口的类并传递给线程:

classSomeRunimplementsRunnable{

SomeRun(){

}

publicvoidrun(){

...

}

}

SomeRunp=newSomeRun(143);

newThread(p).start();

当一个实现Runnable接口的类被执行时,可以没有子类。

实例化一个Thread实例,并

通过自身作为目标线程。

在大多数情况下,如果你只打算重写的run()方法,并没有其它的线程方法,应使用Runnable接口。

因为类不应该被继承,除非程序员有意修改或增强类

的基本行为。

五、实验内容

1.构建客户端程序

(1)构建datagramSocket对象实例

(2)构建DatagramPacket对象实例,并包含接收者主机地址、接收端口号等信息

(3)调用datagramSocket对象实例的send方法,将DatagramPacket对象实例作为参

数发送。

2.构建服务器端程序

(1)构建datagramSocket对象实例,指定接收的端口号。

(2)构建DatagramPacket对象实例,用于重组接收到的消息。

(3)调用datagramSocket对象实例大家receive方法,进行消息接收,并将

DatagramPacket对象实例作为参数。

六、实验报告

1.客户端和服务器端程序的伪代码;

客户端:

importjava.io.IOException;

import.DatagramPacket;

import.DatagramSocket;

import.InetAddress;

importjava.util.Scanner;

publicclassClient{

publicstaticvoidmain(String[]args)throwsIOException

{

//创建一个客户端DatagramSocket,使用随机端口

DatagramSocketsocket=newDatagramSocket();

//初始化发送用的DatagramSocket,它包含一个长度为0的字节数组

DatagramPacketoutPacket=newDatagramPacket(newbyte[0],0

InetAddress.getByName("127.0.0.1"),30000);

//定义接收网络数据的字节数组

byte[]inBuff=newbyte[4096];

DatagramPacketinPacket=newDatagramPacket(inBuff,inBuff.length);

//创建键盘输入流

Scannerscan=newScanner(System.in);

//不断地读取键盘输入

while(scan.hasNextLine())

{

//将键盘输入的一行字符串转换成字节数组

byte[]buff=scan.nextLine().getBytes();

//设置发送用的DatagramPacket中的字节数据

outPacket.setData(buff);

//发送数据报

socket.send(outPacket);

//读取Socket中的数据,读到的数据放在inPacket所封装的字节数组中

socket.receive(inPacket);

System.out.println(newString(inBuff,0,inPacket.getLength()));

}

}

}

服务端:

importjava.io.IOException;

import.DatagramPacket;

import.DatagramSocket;

publicclassServices{

publicstaticvoidmain(String[]args)throwsIOException

{

//定义接收网络数据的字节数组

byte[]inBuff=newbyte[4096];

//创建DatagramSocket对象

DatagramSocketsocket=newDatagramSocket(30000);

//以指定字节数组创建准备接收数据的DatagramPacket对象

DatagramPacketinPacket=newDatagramPacket(inBuff,inBuff.length);

Stringmessage="消息已经收到!

";

while(true){

socket.receive(inPacket);

//将接收到的内容转换成字符串后输出

System.out.println(newString(inBuff,0,inPacket.getLength()));

//从字符串数组中取出一个元素作为发送数据

byte[]sendData=message.getBytes();

//以指定的字节数组作为发送数据,以刚接收到的DatagramPacket的

//源SocketAddress作为目标SocketAddress创建DatagramPacket

//定义一个用于发送的DatagramPacket对象

DatagramPacketoutPacket=newDatagramPacket(sendData

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1