版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中南大学分布式系统
实验报告目录(我选做4题,按住Ctrl点击目录条可直达,wps下有效)实验一数据包socket应用. 4一、实验目的. 4二、预习与实验要求. 4三、实验环境. 4四、实验原理. 4五、实验内容. 6六、实验报告. 7七、思考题. 7实验二流式soCket应用8TOC\o"1-5"\h\z\o"CurrentDocument"一、实验目的. 8\o"CurrentDocument"二、预习与实验要求. 8\o"CurrentDocument"三、实验环境. 8\o"CurrentDocument"四、实验原理. 8\o"CurrentDocument"五、实验内容. 9\o"CurrentDocument"六、实验报告. 9七、思考题. 11实验三客户/实验三客户/服务器应用开发 11\o"CurrentDocument"一、实验目的. 11\o"CurrentDocument"二、预习与实验要求. 11\o"CurrentDocument"三、实验环境. 11\o"CurrentDocument"四、实验原理. 12\o"CurrentDocument"五、实验内容. 12\o"CurrentDocument"六、实验报告. 13\o"CurrentDocument"实验九虚拟机的使用与Linux系统的安装 37\o"CurrentDocument"、实验目的. 37\o"CurrentDocument"、实验内容和步骤 . 38、实验结果. 40实验一数据包socket应用实验一数据包socket应用一、实验目的理解数据包socket的应用2.实现数据包socket通信3.了解Java并行编程的基本方法二、预习与实验要求预习实验指导书及教材的有关内容,了解数据包socket的通信原理2.熟悉一种javaIDE和程序开发过程;3.了解下列JavaAPI:Thread、Runnable;4.尽可能独立思考并完成实验。三、实验环境a)独立计算机或计算机网络;b)Windows操作系统。c)Jdk工具包d)JCreatororothers四、实验原理1.分布式计算的核心是进程通信。操作系统、网卡驱动程序等应用从不同抽象层面提供了对进程通信的支持,例如Winsock、*。SocketAPI是一种作为IPC提供对系统低层抽象的机制。尽管应用人员很少需要在该层编写代码,但理解socketAPI非常重要,因为:1,高层设施是构建于socket或运行于有限资源平台上的应用来说, 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对象指针作为参数定义。并行编程(以Java为例1)一个线程是比进程更小的执行粒度。 Java虚拟机允许应用程序有多个执行线程同时运行。有两种方法来创建一个新线程的执行。一个是声明一个类是一个线程的子类。这个子类应重写Thread类的run方法。一个子类的实例可以被分配和启动。另一种方法创建一个线程,并同时声明一个类实现了 Runnable接口(这个类要实现run方法)。一个类的实例可以被分配并作为参数传递给创建的线程,并启动线程。例如:创建一个类是Thread的子类:classSomeThreadextendsThread{SomeThread(){publicvoidrun(){}}SomeThreadp=newSomeThread();();创建一个实现Runnable接口的类并传递给线程:classSomeRunimplementsRunnable{SomeRun(){}publicvoidrun(){}}SomeRunp=newSomeRun(143);newThread(p).start();当一个实现Runnable接口的类被执行时,可以没有子类。实例化一个 Thread实例,并通过自身作为目标线程。在大多数情况下,如果你只打算重写的run()方法,并没有其它的线程方法,应使用Runnable接口。因为类不应该被继承,除非程序员有意修改或增强类的基本行为。五、实验内容构建客户端程序(1)构建datagramSocket对象实例(2)构建DatagramPacket对象实例,并包含接收者主机地址、接收端口号等信息(3)调用datagramSocket对象实例的send方法,将DatagramPacket对象实例作为参数发送。(1)构建datagramSocket对象实例,指定接收的端口号。(2)构建DatagramPacket对象实例,用于重组接收到的消息。(3)调用datagramSocket 对象实例大家receive方法,进行消息接收,并将构建服务器端程序DatagramPacket对象实例作为参数。六、实验报告客户端和服务器端程序的伪代码;客户端:importclassClient{publicstaticvoidmain(String[]args)throwsIOException{etBytes();r:!SflrificM[JM*OHUF)kaiwanxiao农虫n.MiMjiMi(30174MI911冃 [»KKUi■”*曰^-” •r■1*砧•■匸整+四rcwiz亞冃聊i川“严油百e弘1an」oi.,b;jr4•霏沪*i汕"和冃口冃上牛n;丼:魏憫尊己经戟到i□KHS'9 ■XJt[血甬陽Ja□St.申SI.谏了c-PrLHJ. duTtfl.lffll (zoi・'ffij3馆息巳经上到!如何避免数据包丢失而造成的无限等待问题答:我认为可在发包时设定一个定时器,若发出去的包在一定时间内没有收到答应,则再发一次。为了避免接受者接到重复的包,可以给数据包加个序号,接受者收包时查看序号即可。如何实现全双工的数据包通信答:利用端口套接字之间的通信功能。实验二流式socket应用一、实验目的1.理解流式socket的原理2.实现流式socket通信二、预习与实验要求1.预习实验指导书及教材的有关内容,了解流式socket的通信原理;2.熟悉java环境和程序开发过程;尽可能独立思考并完成实验。三、实验环境a)独立计算机;b)Windows操作系统;c)Jdk工具包四、实验原理SocketAPI是一种作为IPC提供低层抽象的机制。尽管应用人员很少需要在该层编写代码,但理解socketAPI非常重要,因为:1,高层设施是构建于socketAPI之上的,即他们是利用socketAPI提供的操作来实现;2,对于以响应时间要求较高或运行于有限资源平上的应用来说,socketAPI可能是最适合的。通信传送,被传输报文称为数据包。而TCP则允许面向连接的可靠通信,这种IPC称为流式socket。Java为流式socketAPI 提供两类socket⑴式用于连接的连接socket(2)式用于数据交换的数据 socket。五、实验内容构建客户端程序和服务器端程序都需要的 MystreamSocket类,定义继承自javaSocket的sendMessage和receiveMessage方法构建客户端程序(1)创建一个MyStreamsocket的实例对象,并将其指定接收服务器和端口号(2)调用该socket的receiveMessage方法读取从服务器端获得的消息构建服务器端程序(1)构建连接socket实例,并与指定的端口号绑定,该连接socket随时侦听客户端的连接请求(2) 创建一个MyStreamsocket的实例对象(3)调用MyStreamsocket的实例对象的sendMessage方法,进行消息反馈。六、实验报告应用程序的结构图,说明程序之间的关系;A*m><rlientw* |i.・《kformi*plib(■^111 pBiitikirl*ri«tt2■程序的伪代码。公用服务功能import.*;import.*;publicclassMystreamSocketextendsSocket{privateSocketsocket;privateBufferedReaderinput;privatePrintWriteroutput;ava:importclassClient{publicstaticvoidmain(Stringargs[]){try{InetAddresshostname=("localhost");MystreamSocketmss=newMystreamSocket(hostname,12345);("我是客户端,我请求连接!");();}catch(IOExceptione){tart();}}catch(IOExceptione){
答:服务端监听端口,每当有一个连接请求发来时,就与其建立新的连接,的功能进行通信。2.如何实现安全socketAPI答:注意在通信过程中的各种异常情况的捕获与处理如何实现1对多的并发答:在服务端使用多线程。实验三客户/服务器应用开发一、实验目的1.验证daytime和echo程序,2.实现包socket支撑的C/S模式IPC机制3.实现流式socket支撑的C/S模式IPC机制二、预习与实验要求1.预习实验指导书及教材的有关内容,了解daytime和echo要提供的具体服务内容2.复习包socket和流式socket的实现原理;实验前认真听讲,服从安排。尽可能独立思考并完成实验。三、实验环境a)独立计算机;b)Windows操作系统。c)Jdk工具包四、实验原理C/S模式是主要的分布式应用范型,其设计的目的是提供网络服务。网络服务指如daytime、telnet、ftp和WWV之类的允许网络用户共享资源的服务。要构建C/S范型的应用就必须解决以下一些关键问题:(1) 如何通过会话实现多个用户的并发问题(2) 如何定义客户和服务器在服务会话期间必须遵守的协议(3) 服务定位问题(4) 进程间通信和事件同步问题:语法、语义和响应(5) 数据表示问题在解决了这些问题的基础上,C/S范型必须遵从3层结构的软件体系结构:(1) 表示层,提供与客户端进行交互的界面(2) 应用逻辑层,定义服务器和客户端要处理的主要事务的业务逻辑(3) 服务层,定义应用逻辑层所需要的底层支持技术,例如定义其IPC机制里的receive方法和send方法等。五、实验内容构建用数据包socket实现的daytime客户端程序(1)构建表示层程序(2) 构建应用逻辑层程序(3) 构建服务层程序构建用数据包socket实现的daytime服务器端程序(1) 构建表示层和应用逻辑层程序(2) 构建服务层程序(3) 构建服务层程序所需要的下层程序(它封装了客户端的消息和地址)构建用流式socket实现的daytime应用程序包
4.构建用数据包socket实现的echo应用程序包5.构建用流式socket实现的echo应用程序包六、实验报告各户端:1■用数据包socket实现的daytime应用程序包的构架,列明各程序之间的关系;各户端:服务端:DayttncClicfttlf ■■♦■IDavlimcCJleniHclpcrl !1 叫y%服务端:DayttncClicfttlf ■■♦■IDavlimcCJleniHclpcrl !1 叫y%iMyChcntDuligramf#fII■1■1Socket11电IJa111IhTb*■■z*Frt3LVCMciMgc0-q 扌1Ditd^mmSucLct\T・ST\rrD:vpr;im^ndMesiaix1iJ:\T・ST\rrD:vpr;im^ndMesiaix1iJ:JL'tlVjMo-JLj/kllCSeokr()rjirSockjt代码:客户端:publicclassDaytimeClient1{publicstaticvoidmain(String[]args){InputStreamReaderis=newInputStreamReader;BufferedReaderbr=newBufferedReader(is);try{"WelcometotheDaytimeclient.\n"+"Whatisthenameoftheserverhost");StringhostName=();if()==0)hostName="localhost"; ;publicclassDaytimeClientHelper1{publicstaticStringgetTimestamp(StringhostName,StringportNum){Stringtimestamp=""try{InetAddressserverHost=(hostName);intserverPort=(portNum);import.*;publicclassMyClientDatagramSocketextendsDatagramSocket{staticfinalintMAX_LEN=100;MyClientDatagramSocket()throwsSocketException{super();}MyClientDatagramSocket(intportNo)throwsSocketException{super(portNo);}publicvoidsendMessage(InetAddressreceiverHost,intreceiverPort,Stringmessage)throwsIOException{byte[]sendBuffer();DatagramPacketdatagram=newDatagramPacket(sendBuffer,,receiverHost,receiverPort);(datagram);}publicStringreceiveMessage()throwsIOException{byte[]receiveBuffer=newbyte[MAX_LEN];DatagramPacketdatagram=newDatagramPacket(receiveBuffer,MAX_LEN);(datagram);Stringmessage=newString(receiveBuffer);returnmessage;}}服务端:import.*;importpublicclassDaytimeServer1{publicstaticvoidmain(String[]args){intserverPort=13;if==1)serverPort=(args[0]);try{MyServerDatagramSocketmySocket=newMyServerDatagramSocket(serverPort);"Daytimeserverready.");while(true){DatagramMessagerequest=();"Requestreceived");Datetimestamp=newDate();"timestampsent:"+());(),(),());}catch(Exceptionex){"Thereisaproblem:"+ex);import.*;import.*;publicclassMyServerDatagramSocketextendsDatagramSocket{staticfinalintMAX_LEN=100;MyServerDatagramSocket(intportNo)throwsSocketException{super(portNo);}publicvoidsendMessage(InetAddressreceiverHost,intreceiverPort,Stringmessage)throwsIOException{byte[]sendBuffer();DatagramPacketdatagram=newDatagramPacket(sendBuffer,,receiverHost,receiverPort);(datagram);publicStringreceiveMessage()throwsIOException{byte[]receiveBuffer=newbyte[MAX_LEN];DatagramPacketdatagram=newDatagramPacket(receiveBuffer,MAX_LEN);(datagram);Stringmessage=newString(receiveBuffer);returnmessage;}publicDatagramMessagereceiveMessageAndSender()throwsIOException{byte[]receiveBuffer=newbyte[MAX_LEN];DatagramPacketdatagram=newDatagramPacket(receiveBuffer,MAX_LEN);(datagram);DatagramMessagereturnVal=newDatagramMessage();(newString(receiveBuffer),(),());returnreturnVal;}}import.*;publicclassDatagramMessage{privateStringmessage;privateInetAddresssenderAddress;privateintsenderPort;publicvoidputVal(Stringmessage,InetAddressaddr,intport){=message;=addr;=port;}publicStringgetMessage(){return;}publicInetAddressgetAddress(){return;}publicintgetPort(){return;}}客户端:2.用流式socket实现的daytime应用程序包的构架,列明各程序之间的关系客户端:Ln*■fDaytimrCLicntHelpdAJ础**71■Va«iFH 4 _r &rr.a*Cl尹_•33■ v衬」h3.A*■各u***•—二「()p.二nvkMNdgn(」"ccs.<r;Mcsb4gcAlMl尹=自二import.*;import.*;publicclassMyStreamSocketextendsSocket{privateSocketsocket;privateBufferedReaderinput;privatePrintWriteroutput;MyStreamSocket(InetAddressacceptorHost,intacceptorPort)throwsSocketException,IOException{socket=newSocket(acceptorHost,acceptorPort);setStreams();}MyStreamSocket(Socketsocket)throwsIOException{=socket;setStreams();}privatevoidsetStreams()throwsIOException{InputStreaminStream=();input=newBufferedReader(newInputStreamReader(inStream));OutputStreamoutStream=();output=newPrintWriter(newOutputStreamWriter(outStream));}publicvoidsendMessage(Stringmessage)throwsIOException{(message);();}publicStringreceiveMessage()throwsIOException{Stringmessage=();returnmessage;客户端:import.*;publicclassDaytimeClient2{publicstaticvoidmain(String[]args){InputStreamReaderis=newInputStreamReader;BufferedReaderbr=newBufferedReader(is);try{"WelcometotheDaytimeclient.\n"+"Whatisthenameoftheserverhost");StringhostName=();if()==0)hostName="localhost";"Whatistheportnumberoftheserverhost");StringportNum=();if()==0)portNum="13";"Hereisthetimestampreceivedfromtheserver"+(hostName,portNum));}catch(Exceptionex){();import.*;publicclassDaytimeClientHelper2{publicstaticStringgetTimestamp(StringhostName,StringportNum)throwsException{Stringtimestamp="";InetAddressserverHost=(hostName);intserverPort=(portNum);"Connectionrequestmade");serverPort);MyStreamSocketmySocket=newMyStreamSocket(serverHost,serverPort);timestamp=();();returntimestamp;}}服务端:import.*;import.*;importpublicclassDaytimeServer2{publicstaticvoidmain(String[]args){intserverPort=13;if==1)serverPort=(args[0]);try{ServerSocketmyConnectionSocket=newServerSocket(serverPort);"Daytimeserverready.");while(true){"Waitingforaconnection.");MyStreamSocketmyDataSocket=newMyStreamSocket());"Aclienthasmadeconnection.");Datetimestamp=newDate();"timestampsent:"+());());();}}catch(Exceptionex){();}}}3.用数据包socket实现的echo应用程序包的构架,列明各程序之间的关系;客户1口址a却cvhomessage■ethomessage
客户端:publicclassEchoClient1{staticfinalStringendMessage=".";publicstaticvoidmain(String[]args){InputStreamReaderis=newInputStreamReader;BufferedReaderbr=newBufferedReader(is);try{"WelcometotheEchoclient.\n"+"Whatisthenameoftheserverhost");StringhostName=();if()==0)hostName="localhost";"Whatistheportnumberoftheserverhost");StringportNum=();if()==0)portNum="7777";EchoClientHelper1helper=newEchoClientHelper1(hostName,portNum);booleandone=false;Stringmessage,echo;while(!done){
"Enteralinetoreceiveanechobackfromtheserver,"toquit.");+"orasingleperoidtoquit.");message=();if(()).equals(endMessage)){done=true;();}else{echo=(message);}}}catch(Exceptionex){();import.*;import.*;publicclassEchoClientHelper1{privateMyClientDatagramSocketmySocket;privateInetAddressserverHost;privateintserverPort;EchoClientHelper1(StringhostName,StringportNum)throwsSocketException,UnknownHostException{=(hostName);=(portNum);=newMyClientDatagramSocket();}publicStringgetEcho(Stringmessage)throwsSocketException,IOException{Stringecho="";(serverHost,serverPort,message);echo=();returnecho;}publicvoiddone()throwsSocketException{();}}import.*;import.*;publicclassMyClientDatagramSocketextendsDatagramSocket{staticfinalintMAX_LEN=100;MyClientDatagramSocket()throwsSocketException{super();}MyClientDatagramSocket(intportNo)throwsSocketException{super(portNo);}publicvoidsendMessage(InetAddressreceiverHost,intreceiverPort,Stringmessage)throwsIOException{byte[]sendBuffer();DatagramPacketdatagram=newDatagramPacket(sendBuffer,,receiverHost,receiverPort);(datagram);}publicStringreceiveMessage()
throwsIOException{byte[]receiveBuffer=newbyte[MAX_LEN];DatagramPacketdatagram=newDatagramPacket(receiveBuffer,MAX_LEN);(datagram);Stringmessage=newString(receiveBuffer);returnmessage;}服务端:import.*;publicclassEchoServer1{publicstaticvoidmain(String[]args){intserverPort=1117;if==1)serverPort=(args[0]);newtry{newMyServerDatagramSocketmySocketMyServerDatagramSocket(serverPort);"Echoserverready.");while(true){DatagramMessagerequest=();"Requestreceived");Stringmessage=();"messagereceived:"+message);(),(),message);catch(Exceptionex){();import.*;import.*;publicclassMyServerDatagramSocketextendsDatagramSocket{staticfinalintMAX_LEN=100;MyServerDatagramSocket(intportNo)throwsSocketException{super(portNo);}publicvoidsendMessage(InetAddressreceiverHost,intreceiverPort,Stringmessage)throwsIOException{byte[]sendBuffer();DatagramPacketdatagram=newDatagramPacket(sendBuffer,,receiverHost,receiverPort);(datagram);}publicStringreceiveMessage()throwsIOException{byte[]receiveBuffer=newbyte[MAX_LEN];DatagramPacketdatagram=newDatagramPacket(receiveBuffer,MAX_LEN);(datagram);Stringmessage=newString(receiveBuffer);returnmessage;}publicDatagramMessagereceiveMessageAndSender()throwsIOException{byte[]receiveBuffer=newbyte[MAX_LEN];DatagramPacketdatagram=newDatagramPacket(receiveBuffer,MAX_LEN);(datagram);DatagramMessagereturnVal=newDatagramMessage();(newString(receiveBuffer),(),());returnreturnVal;}}import.*;publicclassDatagramMessage{privateStringmessage;privateInetAddresssenderAddress;privateintsenderPort;publicvoidputVal(Stringmessage,InetAddressaddr,intport){=message;=addr;=port;}publicStringgetMessage(){return;publicInetAddressgetAddress(){return;}publicintgetPort(){return;}}4.用流式socket实现的echo应用程序包的构架,列明各程序之间的关系EchoScnrr?當户1窖户2import.*;import.*;publicclassMyStreamSocketextendsSocket{privateSocketsocket;privateBufferedReaderinput;privatePrintWriteroutput;MyStreamSocket(InetAddressacceptorHost,intacceptorPort)throwsSocketException,IOException{socket=newSocket(acceptorHost,acceptorPort);setStreams();}MyStreamSocket(Socketsocket)throwsIOException{=socket;setStreams();}privatevoidsetStreams()throwsIOException{InputStreaminStream=();input=newBufferedReader(newInputStreamReader(inStream));OutputStreamoutStream=();output=newPrintWriter(newOutputStreamWriter(outStream));}publicvoidsendMessage(Stringmessage)throwsIOException{(message);();}publicStringreceiveMessage()throwsIOException{Stringmessage=();returnmessage;}}客户端:import.*;publicclassEchoClient2{staticfinalStringendMessage=".";publicstaticvoidmain(String[]args){InputStreamReaderis=newInputStreamReader;BufferedReaderbr=newBufferedReader(is);try{"WelcometotheEchoclient.\n"+"Whatisthenameoftheserverhost");StringhostName=();if()==0)hostName="localhost";"Whatistheportnumberoftheserverhost");StringportNum=();if()==0)portNum="7";EchoClientHelper2helper=newEchoClientHelper2(hostName,portNum);booleandone=false;Stringmessage,echo;while(!done){"Enteralinetoreceiveanecho"+"fromtheserver,orasingleperiodtoquit.");message=();if(()).equals(endMessage)){done=true;();else{echo=(message);}catch(Exceptionex){();}}}import.*;import.*;publicclassEchoClientHelper2{staticfinalStringendMessage=".";privateMyStreamSocketmySocket;privateInetAddressserverHost;privateintserverPort;EchoClientHelper2(StringhostName,StringportN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 劳动通论刘向兵课件
- 2025版高考化学二轮复习 板块1 题型突破4 突破点3
- 2020-2021学年人教部编版语文二年级下册-《蜘蛛开店》教案
- 脑出血开颅术后的护理
- 计算机导论 教案 单元3 计算机软件基础
- 髋部查体课件
- 药用食物概论 第五讲 各论-大枣课件
- 2024届江苏苏州高新区一中高三调研考试数学试题
- 2025年公司元旦颁奖晚会表彰大会模板
- 2024年演出经纪人资格《演出市场政策与经纪实务》考前必刷必练题库500题(含真题、必会题)
- 鸡蛋商业计划书
- 超市会计核算与财务管理调查报告
- 护理职业生涯规划展示
- 学校教师心理健康工作考核细则
- 汽车4S店延保提升培训
- 传统文化与人文精神
- 2024年上海市奉贤区高三年级上册期末高考与等级考一模政治试卷含答案
- 铁路职业素质全套教学课件
- 技能比赛开幕式闭幕式及裁判工作实施方案
- 电致变色玻璃项目运营方案
- 8.3数学建模活动的主要过程课件-高一上学期数学北师大版
评论
0/150
提交评论