欢迎来到天天文库
浏览记录
ID:49538287
大小:1.21 MB
页数:8页
时间:2020-03-02
《编程实现可靠数据传输原理GO-BAN-N实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.编程实现可靠数据传输原理GO-BACK-N实验姓名:吴杰学号:13281144班级:计科1306一.实验目的运用各种变成语言实现基于Go-Back-N的可靠数据传输软件二.实验意义通过本实验,使学生能够对可靠数据传输原理有进一步的理解和掌握。三.实验步骤1.利用java编程实现基于Go-Back-N的可靠数据传输软件。2.运行程序,程序将模拟实际网络中的可靠数据传输..一.结果分析..通过本次实验,了解了GBN传输协议的相关知识。实验代码通过查阅资料很容易理解,但是怎么实现这个程序对我来说是个问题。一.附件JA
2、VA语言代码(1)Sender类packageGBN;importjava.util.Timer;publicclassSenderextendsThread{publicintwindowsize=3;//发送方窗口长度设为3publicString[]data={"data1","data2","data3","data4","data5","data6","data7"};//模拟七个数据包publicintsign[]={0,1,2,3,4,5,6};//为7个数据包标号publicintlocalack
3、=-1;//保存最近收到的ACKpublicTimerslitime=null;//定时器(这里定为2秒)publicintswitches=0;//超时标志,1为超时publicintwindowsign[];//当前窗口内待发的数据分组的序号publicintacksign=0;//为0表示收到正确ACK,为1表示收到错误的ACK,必须重发!publicSender(){windowsign=newint[windowsize];//给窗口分配指定大小的空间for(inti=0;i<3;i++)windows
4、ign[i]=sign[i];//窗口初始化时存放前3个序号}publicvoidrun(){System.out.println("发送方开始发送分组数据!");}publicvoidgetack(intack){System.out.println("发送方收到了ACK,序号为"+ack+"并且开始加以确认!");if(ack!=localack+1){System.out.println("经验证,这不是发送方正期待的ACK,立刻重发序号为"+(localack+1)+"的数据分组!");acksign=1
5、;}else{localack=ack;//表示正确确认了ACKacksign=0;}}..publicvoidtime(){switches=0;//标志初始化为0litime=newTimers();Timerlimit=newTimer();limit.schedule(litime,0,100);}}(1)Receiver类packageGBN;publicclassReceiverextendsThread{publicintlastdata;publicSendersender;publicvoidr
6、un(Senders){sender=s;System.out.println("接收方开始接收分组数据!");}voidreceive(intdata,Senders){sender=s;//发送方的参数传递System.out.println("接收方收到了序号为"+data+"的分组!");if(data!=0){if(data==lastdata+1){//数据包序号校验,若连续则是正确/所期待的System.out.println("该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!"
7、);lastdata=data;//更新本地保存的数据包序号变量respond(lastdata);//回送该正确接收的数据包对应的ACK}else{System.out.println("该数据分组不是接收方所期待的,该分组将被丢弃,接收方准备回送最后接受的数据分组对应的ACK!");respond(lastdata);//若不是所期待的数据包则丢弃并且重发上一次的ACK}}else{System.out.println("该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!");lastdat
8、a=data;respond(lastdata);//首次接收数据包并且回送ACK}}..voidrespond(intack){//回送指定序号的ACKif(sender.litime.limit<20){//判断是否超时(2秒)ack=lastdata;//获取本场保存的数据包序号sender.getack(ack);}else{System.out.println(
此文档下载收益归作者所有