- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验七、传输层可靠传输协议GBN编程实验报告
序号:姓名:学号:成绩 指导老师:
一、实验目的:
1、通过编写实现一个简单可靠的数据传输协议GBN的发送和接收代码,模拟可靠数据传输
2、理解TCP协议可靠传输的差错检测、重传、累计确认、定时器的可靠传输策略。
二、实验原理:
在GBN中,发送端不需要在接收到上一个数据包的ACK后才发送下一个数据包,而是可以连续发送数据包。在发送端发送数据包的过程中,如果接收到对应已发送的某个数据包的NACK,则发送端将NACK对应的某个数据包进行重发,然后再将该数据包之后的数据包依次进行重发。
本次试验中采用
Sender类
import java.util.Timer;
public class Sender extends Thread{
public int windowsize=3; //发送方窗口长度设为3
public String[] data={data1,data2,data3,
data4,data5,data6,data7}; //模拟七个数据包
public int sign[]={0,1,2,3,4,5,6}; //为7个数据包标号
public int localack=-1; //保存最近收到的ACK
public Timers litime=null; //定时器(这里定为2秒)
public int switches=0; //超时标志,1为超时
public int windowsign[]; //当前窗口内待发的数据分组的序号
public int acksign=0;
//为0表示收到正确ACK,为1表示收到错误的ACK,必须重发!
public Sender(){
windowsign=new int[windowsize]; //给窗口分配指定大小的空间
for(int i=0;i3;i++)
windowsign[i]=sign[i]; //窗口初始化时存放前3个序号
}
public void run(){
System.out.println(发送方开始发送分组数据!);
}
public void getack(int ack){
System.out.println(发送方收到了ACK,序号为+ack+并且开始加以确认!);
if(ack!=localack+1){
System.out.println(经验证,这不是发送方正期待的ACK,立刻重发序号为+(localack+1)+的数据分组!);
acksign=1;
}
else{
localack=ack; //表示正确确认了ACK
acksign=0;
}
}
public void time(){
switches=0; //标志初始化为0
litime=new Timers();
Timer limit=new Timer();
limit.schedule(litime, 0,100);
}
}
Receiver类
import java.util.Random;
public class Receiver extends Thread{
public int lastdata;
public Sender sender;
public void run(Sender s){
sender=s;
System.out.println(接收方开始接收分组数据!);
}
void receive(int data, Sender s){
sender=s; //发送方的参数传递
System.out.println(接收方收到了序号为+data+的分组!);
if(data!=0){
if(data==lastdata+1){
//数据包序号校验,若连续则是正确/所期待的
System.out.println(该数据分组正是接收方所期待的,接收方接受了它并准备回送对应的ACK!);
lastdata=data; //更新本地保存的数据包序号变量
respond(lastdata); //回送该正确接收的数据包对应的ACK
}
您可能关注的文档
- (2016年秋季版)七年级历史下册 第18课 清朝君主专制的极端强化练习 川教版.doc
- [经济学]会计学原理习题.pdf
- [资料]留学项目计划书.doc
- 《物质与社会生活的变迁》课件人民版.ppt
- 2017年省医药卫生科技计划项目.DOC
- c语言精品课程网站的设计与实现.ppt
- Java猜拳小游戏源代码.doc
- TSL2561传感器中文资料.doc
- 仓库温湿度监测系统毕业设计.doc
- 等差等比数列练习题以及基础知识点总结-经典版(无答案).doc
- 计量规程规范 JJF 2324-2025静电放电电流靶校准规范.pdf
- 《JJF 2324-2025静电放电电流靶校准规范》.pdf
- 山东省泰安市2026届高三上学期期中考试数学含答案.doc
- 浙江省杭州市2025学年第一学期高三年级教学质量检测语文试题卷及答案.doc
- 安徽省皖豫联考2026届高三上学期11月期中考试地理含答案.doc
- 山东省菏泽市A类高中2026届高三第一学期期中考试物理含答案.doc
- 2022年高考语文试卷(上海)(秋考)(解析卷).doc
- 2022年高考历史试卷(河北)(空白卷).doc
- JJF 1025-2025机械秤改装技术要求.pdf
- 计量规程规范 JJF 1025-2025机械秤改装技术要求.pdf
原创力文档


文档评论(0)