资源简介
北邮 计算机网络课程实验 滑动窗口协议 选择重传协议与go-back-n协议
压缩包内附实验报告与配套代码
代码片段和文件信息
#include
#include
#include “protocol.h“
#define MAX_SEQ 15 //最大的窗口大小
#define NR_BUFS ((MAX_SEQ + 1) / 2) //缓冲区大小
#define DATA_TIMER 3000 //帧超时时间间隔
#define ACK_TIMER 240 //ack的超时间隔
struct frame {
//数据帧的结构体定义
unsigned char kind;
unsigned char ack;
unsigned char seq;
unsigned char data[PKT_LEN];
unsigned int padding;
};
int no_nak=1; //标志是否已经发送过nak
static int phl_ready = 0; //物理层就绪标记
unsigned char oldest_frame = MAX_SEQ + 1; //
static int between(unsigned char aunsigned char bunsigned char c)
//滑动窗口判断函数,判断帧号(ack号)是否在窗口内
{
if(((a <= b) && (b < c)) || ((c < a) && (a <= b)) || ((b < c) && (c < a)))
return 1;
else
return 0;
}
static void put_frame(unsigned char *frame int len)
{
//发送帧前预处理,加入校验和crc
*(unsigned int *)(frame + len) = crc32(frame len);//crc32校验
send_frame(frame len + 4);//发送帧
phl_ready = 0;//设置物理层阻塞
}
static void send_data_frame(unsigned char fkunsigned char frame_nrunsigned char frame_expectedunsigned char buffer[NR_BUFS][PKT_LEN])
{
//发送数据帧,或ack与nak
struct frame s;
s.kind = fk;
s.seq = frame_nr;
s.ack = (frame_expected + MAX_SEQ) % (MAX_SEQ + 1);
if(fk==frame_DATA)//发送的是数据帧
{
memcpy(s.data buffer[frame_nr % NR_BUFS] PKT_LEN);//复制分组到帧内
dbg_frame(“Send DATA %d %d ID %d\n“ s.seq s.ack *(short *)s.data);//输出记录
put_frame((unsigned char *)&s 3 + PKT_LEN); //发送
start_timer(frame_nr % NR_BUFS DATA_TIMER); //启动定时器
}
else if(fk == frame_NAK)//发送的是NAK
{
no_nak = 0; //下一次不再发送nak
put_frame((unsigned char *)&s 3); //发送
}
else if(fk == frame_ACK)//发送的是ACK
{
dbg_frame(“Send ACK %d\n“ s.ack);//输出记录
put_frame((unsigned char *)&s 3);//发送
}
phl_ready = 0; //物理层阻塞
stop_ack_timer(); //关闭ack定时器
}
void main(int argc char **argv)
{
int event arg;
struct frame f;
int len = 0;
int i;
static unsigned char ack_expected = 0 next_frame_to_send = 0;//当前帧和下一期望帧的序号
static unsigned char frame_expected = 0 too_far = NR_BUFS;
static unsigned char nbuffered;
int arrived[NR_BUFS];//缓冲区,存放到达的帧
static unsigned char out_buf[NR_BUFS][PKT_LEN] in_buf[NR_BUFS][PKT_LEN];
protocol_init(argc argv);//初始化协议
lprintf(“Coded by zdf Build Time: “ __DATE__“ “__TIME__“\n“);
for(i = 0; i < NR_BUFS; i++) //将接收方的缓冲区清空
arrived[i] = 0;
enable_network_layer();//启动网络层,准备接收数据
while(1)
{
event = wait_for_event(&arg); //等待事件,进行下一步操作
switch (event)
{
case NETWORK_layer_READY:
nbuffered++; //发送却未被确认的帧计数器+1
get_packet(out_buf[next_frame_to_send % NR_BUFS]);//得到分组存入缓冲区内
send_data_frame(frame_DATAnext_frame_to_sendframe_expectedout_buf);//发送数据帧
next_frame_to_send=(next_frame_to_send + 1) % ( MAX_SEQ + 1);//处理滑动窗口
break;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 35647 2015-05-24 14:16 Selective\datali
文件 46710 2015-05-24 14:16 Selective\datali
文件 6152 2015-05-24 13:51 Selective\datali
文件 3476 2009-10-19 16:46 Selective\datali
文件 524 2009-10-16 10:23 Selective\datali
文件 500736 2015-05-24 13:52 Selective\datali
文件 518 2009-10-16 12:34 Selective\datali
文件 1095776 2015-05-24 13:52 Selective\datali
文件 50176 2009-11-28 19:29 Selective\datali
文件 4493 2015-05-19 13:31 Selective\datali
文件 48640 2009-11-28 19:29 Selective\datali
文件 2617344 2015-05-24 13:52 Selective\datali
文件 250 2009-11-28 19:00 Selective\datali
文件 2031616 2015-05-24 14:16 Selective\datali
文件 961 2015-05-19 15:20 Selective\datali
..A..H. 19456 2015-05-24 14:16 Selective\datali
文件 6293 2015-05-19 13:32 Selective\datali
文件 1445 2015-05-24 13:52 Selective\Debug\datali
文件 13592 2015-05-24 13:52 Selective\Debug\datali
文件 616 2015-05-24 13:52 Selective\Debug\datali
文件 980 2015-05-24 13:52 Selective\Debug\datali
文件 384 2015-05-24 13:52 Selective\Debug\datali
文件 164 2015-05-24 13:52 Selective\Debug\datali
文件 1084 2015-05-24 13:52 Selective\Debug\datali
文件 2694 2015-05-24 13:52 Selective\Debug\datali
文件 464 2015-05-24 13:52 Selective\Debug\datali
文件 27648 2015-05-24 13:52 Selective\Debug\vc120.idb
文件 77824 2015-05-24 13:52 Selective\Debug\vc120.pdb
文件 41984 2009-11-28 19:01 Selective\Debug\vc60.idb
文件 53248 2009-11-28 19:00 Selective\Debug\vc60.pdb
............此处省略22个文件信息
- 上一篇:管理活动目录域服务实训.docx
- 下一篇:ANUSPLIN软件
相关资源
- 计算机网络电子政务网站课程设计
- 湖北工业大学计算机网络09-10期末考试
- 计算机网络课程设计----模拟Ethernet帧
- 计算机网络高级软件编程技术第10章
- 计算机网络组网毕业设计(校园局域
- 编译原理课件 北邮
- 计算机网络系统方法 第五版 课后答案
- 计算机网络课程设计报告中小型网络
- 北邮软件工程分布式系统中需求定义
- 计算机网络思维导图-第三章-数据链路
- 北邮微机系统与接口技术小学期报告
- 北邮编译原理实验二:语法分析程序
- 北邮计通网实验八路由器配置
- 北邮计通网实验三DNS DHCP服务
- 网络课程设计计算机网络课程设计
- 计算机网络模拟 YS-RouteSim3.1
- 北邮操作系统实验报告
- 计算机网络(谢希仁第六版)课后答
- (第五版)计算机网络 Andrew S.Tanenb
- 图书馆网络设计计算机网络
- 公司网络系统集成方案课程设计
- 计算机网络自顶向下方法第六版中英
- 计算机网络第5版英文版PDFAndrew.S.Tan
- 计算机网络——自顶向下方法 课后答
- 北邮移动通信原理期末考试题
- 计算机网络期末综合实验
- 北邮计网实践实验报告3&4
- 计算机网络课程设计 校园网规划
- 基于距离向量算法的rip协议的实
- 计算机网络自顶向下方法原书第六版
评论
共有 条评论