



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络滑动窗口实验程序清单 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年开封市控制器有限公司劳动合同
- 中国水溶性有机香精市场现状研究分析与发展前景预测报告
- 2025年农业设备租赁合同简单模板
- 《矿难应急处理》课件
- 2025古董买卖的合同范本
- 2025年定期性股权转让合同的范本
- 《探索微波炉原理》课件
- 2025年家电采购合同协议书
- 建筑工程质量事故案例分析
- 《能源转化计算》课件
- 国家职业技术技能标准 4-01-06-01 电子商务师S 人社厅发202233号
- 山东省自然科学基金申报书-面上项目
- 鞣制化学题库
- 基于“三新”背景下的2025届新高考物理复习备考策略-课件
- 2024人防工程设计指南医疗救护工程分册
- 应急管理数据标准化与共享
- 风险控制岗位招聘笔试题与参考答案(某大型国企)2024年
- 药剂科考勤管理制度
- 学徒签约合同协议书
- 山东省济南市等2地2023-2024学年高一下学期5月期中物理试题(解析版)
- 07SG111-2 建筑结构加固施工图设计深度图样
评论
0/150
提交评论