全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络滑动窗口实验程序清单 Page 4/4#include #include #include protocol.h#include datalink.hstatic int phy_ready = 0;/物理层状态static boolean between (seq_nr a,seq_nr b,seq_nr c)if( (a=b)&(bc) | (ca)&(a=b) | (bc)&(c 1; used for outbound stream, and initianize next frame going out */seq_nr ack_expected=0; /* oldest frame as yet unacknowledged, and initianize next ack expected inbound */seq_nr frame_expected=0; /* next frame expected on inbound stream, and initialize number of frame expected inbound */frame r; /* scratch varible */packet bufferMAX_SEQ+1; /* buffers for the outbound stream */seq_nr nbuffered=0; /* # output buffers currently in use, and initially no packets are buffered */seq_nr i; /* used to index into the buffer array */ protocol_init(argc, argv);lprintf(nDesigned by Liu Yang,Teng Xiao,Xu Ye Nan, build: _DATE_ _TIME_n);enable_network_layer();while(true)event = wait_for_event(&arg);switch(event)case NETWORK_LAYER_READY: /* the network layer has a packet to send */bufferLennext_frame_to_send = get_packet(buffernext_frame_to_send);/*bufferLen 存储每个buffer中数据的有效长度*/nbuffered +;/* expand the senders window */send_data(Data,next_frame_to_send,frame_expected,buffer,bufferLen); /发送数据帧inc(next_frame_to_send);/* advance senders upper window edge */break;case PHYSICAL_LAYER_READY:phy_ready = 1;break;case FRAME_RECEIVED:/* a data or control frame has arrived */len = recv_frame(unsigned char *) &r,sizeof(r);/返回存放帧的缓冲区的大小if (len 6 | crc32(unsigned char *)&r, len) != 0) /大小不够或者校验错误 dbg_event(* Receiver Error, Bad CRC Checksumn);if(r.seq = frame_expected)/若错误帧中的seq是期望的seq,则发送nak(忽略seq是错误的情况)send_data(Nak,next_frame_to_send,frame_expected,buffer,bufferLen);break; if(r.kind = Data)/接收的是数据帧dbg_frame(Recv data %d %d, ID %dn,r.seq,r.ack,*(short *));if(r.seq = frame_expected)/若所得帧是期望得到的帧,递交给网络层put_packet(,len-7);start_ack_timer(ACK_TIMER);inc(frame_expected);else if(r.kind = Ack)/接受ackdbg_frame(Recv ACK %dn, r.ack);else/接受nak,r.ack为对方需要重传的窗口号,表明对方已经收到r.ack之前的数据帧/即相当于收到了一个窗口号为r.ack-1的ackdbg_frame(Recv NAK %dn, r.ack);next_frame_to_send = r.ack;r.ack = (r.ack+MAX_SEQ) % (MAX_SEQ+1);while(between(ack_expected,r.ack,next_frame_to_send)/执行收到了ack的操作nbuffered -;stop_timer(ack_expected);inc(ack_expected);for(i=1;i=nbuffered;i+)/重发错误帧send_data(Data,next_frame_to_send,frame_expected,buffer,bufferLen);inc(next_frame_to_send);break;while(between(ack_expected,r.ack,next_frame_to_send)nbuffered -;stop_timer(ack_expected);inc(ack_expected);break;case DATA_TIMEOUT:/数据发送超时 重发dbg_event(- data %d timeoutn, arg);next_frame_to_send = ack_expected;for(i=1;i=nbuffered;i+)send_data(Data,next_frame_to_send,frame_expected,buffer,bufferLen);inc(next_frame_to_send);break;case ACK_TIMEOUT:/ack超时 单独发送ack帧send_data(Ack,next_frame_to
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东佛山禅城区玫瑰小学招聘合同制教师1人备考题库含答案详解(黄金题型)
- 2026南昌市劳动保障事务代理中心招聘劳务派遣人员2人备考题库含答案详解(培优a卷)
- 2026山东威海智慧谷实验幼儿园招聘1人备考题库及一套完整答案详解
- 物流行业仓储与配送管理手册
- 2026年共享办公空间运营公司设备能耗统计与控制制度
- 2026年共享办公空间运营公司活动效果评估与反馈管理制度
- 晚春知识点归纳
- 企业内部审计风险管理与预防手册(标准版)
- 媒体传播效果评估操作手册
- 2025 小学三年级道德与法治下册网络安全小知识课件
- 广东省实验中学2025-2026学年高二上学期期末练习语文试题(含答案)(含解析)
- 2026四川省物诚益商医药有限公司招聘业务员6人备考题库完整答案详解
- 九上《水浒传》整本书阅读真题汇编+详细解析
- 安全教育培训管理制度及流程
- 2026年开工第一课安全生产培训课件
- 煤矿春节放假期间的工作方案及安全技术措施
- GB/T 5076-2025具有两个轴向引出端的圆柱体元件的尺寸测量
- GB/T 46568.1-2025智能仪器仪表可靠性第1部分:可靠性试验与评估方法
- 幼儿园教育活动座位摆放指南
- 水池土建施工方案
- 2025中好建造(安徽)科技有限公司第二次社会招聘13人笔试考试备考试题及答案解析
评论
0/150
提交评论