word完美格式精心整理学习帮手中南大学分布式系统实验报告word完美格式精心整理学习帮手目录(我选做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四、实验原理............................................................13五、实验内容............................................................13六、实验报告............................................................13实验九虚拟机的使用与Linux系统的安装....................................31一、实验目的............................................................31二、实验内容和步骤......................................................31三、实验结果............................................................33word完美格式精心整理学习帮手实验一数据包socket应用一、实验目的1.理解数据包socket的应用2.实现数据包socket通信3.了解Java并行编程的基本方法二、预习与实验要求1.预习实验指导书及教材的有关内容,了解数据包socket的通信原理;2.熟悉一种javaIDE和程序开发过程;3.了解下列JavaAPI:Thread、Runnable;4.尽可能独立思考并完成实验。三、实验环境a)独立计算机或计算机网络;b)Windows操作系统。c)Jdk工具包word完美格式精心整理学习帮手d)JCreatororothers四、实验原理1.分布式计算的核心是进程通信。操作系统、网卡驱动程序等应用从不同抽象层面提供了对进程通信的支持,例如Winsock、java.net.*。SocketAPI是一种作为IPC提供对系统低层抽象的机制。尽管应用人员很少需要在该层编写代码,但理解socketAPI非常重要,因为:1,高层设施是构建于socketAPI之上的,即他们是利用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方法)。一个类的实例可以被分配并作为参数传递给创建的线程,并启动线程。例如:创建一个类是Thread的子类:classSomeThreadextendsThread{SomeThread(){}publicvoidrun(){...}}SomeThreadp=newSomeThread();p.start();word完美格式精心整理学习帮手创建一个实现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;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;importjava.util.Scanner;publicclassClient{publicstaticvoidmain(String[]args)throwsIOException{//创建一个客户端DatagramSocket,使用随机端口DatagramSocketsocket=newDatagramSocket();word完美格式精心整理学习帮手//初始化发送用的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;importjava.net.DatagramPacket;importjava.net.DatagramSocket;publicclassServices{publicstaticvoidmain(String[]args)throwsIOException{//定义接收网络数据的字节数组byte[]inBuff=newbyte[4096];//创建DatagramSocket对象DatagramSocketsocket=newDatagramSocket(30000);//以指定字节数组创建准备接收数据的DatagramPacket对象DatagramPacketinPacket=newDatagram