资源简介
北邮 计算机网络课程实验 滑动窗口协议 选择重传协议与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软件
相关资源
- 04741计算机网络原理知识点整理.docx(
- 校园网络规划与设计课程设计
- SOCKET 网络编程 计算机网络 作业 客户
- 数据结构课件(北邮)
- 计算机网络课程设计—ARQ协议模拟实
- 计算机网络第五版 严伟
- 计算机网络(第6版)谢希仁教学课件
- 计算机网络自顶向下方法答案(第六
- 计算机网络管理员国家职业标准
- 计算机网络精讲视频教程
- 计算机网络 第7版 谢希仁 高清完美书
- 信号与系统郑君里北邮课件
- 计算机网络(第5版)(Computer Networ
- 卫星通信知识点总结不包含计算题
- 计算机网络课程设计 小型企业的
- 北邮 现代交换原理实验 sip电话 抓包
- 北航研究生计网实验报告.rar
- 计算机网络校园网课程设计
- 分布式温控系统,北邮软件工程作业
- 计算机网络24分游戏课设完整版
- 计算机网络(谢仁希第五版)课后答
- 北邮高操期末试题答案及知识点总结
- 北邮2015-2016专硕概率论与随机过程期
- 计算机网络课程设计—设计一个校园
- 计算机网络第六版 教学视屏 网盘
- 计算机网络第7版谢希仁复习题完整版
- 计算机网络讲义-陈鸣
- 东北大学计算机网络期末试题+答案
- 计算机网络打作业实现QQ.zip
- 哈尔滨工业大学深圳 高级计算机网络
评论
共有 条评论