• 大小: 1.61MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-31
  • 语言: 其他
  • 标签: 北邮  go-back-n  

资源简介

北邮 计算机网络课程实验 滑动窗口协议 选择重传协议与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\datalink-A.log

     文件      46710  2015-05-24 14:16  Selective\datalink-B.log

     文件       6152  2015-05-24 13:51  Selective\datalink.c

     文件       3476  2009-10-19 16:46  Selective\datalink.dsp

     文件        524  2009-10-16 10:23  Selective\datalink.dsw

     文件     500736  2015-05-24 13:52  Selective\datalink.exe

     文件        518  2009-10-16 12:34  Selective\datalink.h

     文件    1095776  2015-05-24 13:52  Selective\datalink.ilk

     文件      50176  2009-11-28 19:29  Selective\datalink.ncb

     文件       4493  2015-05-19 13:31  Selective\datalink.o

     文件      48640  2009-11-28 19:29  Selective\datalink.opt

     文件    2617344  2015-05-24 13:52  Selective\datalink.pdb

     文件        250  2009-11-28 19:00  Selective\datalink.plg

     文件    2031616  2015-05-24 14:16  Selective\datalink.sdf

     文件        961  2015-05-19 15:20  Selective\datalink.sln

    ..A..H.     19456  2015-05-24 14:16  Selective\datalink.v12.suo

     文件       6293  2015-05-19 13:32  Selective\datalink.vcxproj

     文件       1445  2015-05-24 13:52  Selective\Debug\datalink.log

     文件      13592  2015-05-24 13:52  Selective\Debug\datalink.obj

     文件        616  2015-05-24 13:52  Selective\Debug\datalink.tlog\cl.command.1.tlog

     文件        980  2015-05-24 13:52  Selective\Debug\datalink.tlog\CL.read.1.tlog

     文件        384  2015-05-24 13:52  Selective\Debug\datalink.tlog\CL.write.1.tlog

     文件        164  2015-05-24 13:52  Selective\Debug\datalink.tlog\datalink.lastbuildstate

     文件       1084  2015-05-24 13:52  Selective\Debug\datalink.tlog\link.command.1.tlog

     文件       2694  2015-05-24 13:52  Selective\Debug\datalink.tlog\link.read.1.tlog

     文件        464  2015-05-24 13:52  Selective\Debug\datalink.tlog\link.write.1.tlog

     文件      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个文件信息

评论

共有 条评论