• 大小: 203KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: C/C++
  • 标签: 计网实验  

资源简介

计网实验 数据链路层实验 源代码 C语言实现 选择重传协议

资源截图

代码片段和文件信息

#include 
#include 

#include “protocol.h“
#include “datalink.h“

#define MAX_SEQ 31
#define DATA_TIMER 3800//calculagraph timer
#define ACK_TIMER 1100
#define NR_BUFS 16   //windows number
#define inc(k)if(k
typedef enum{falsetrue}bool;
typedef unsigned char seq_nr;//sequence or ack number
typedef struct{
unsigned char info[PKT_LEN];
}packet;//packet definition

static int phl_ready = 0;

bool no_nak=true;

typedef struct frame { 
    unsigned char kind; // frame_DATA 
    seq_nr ack;//acknowledgement number
    seq_nr  seq;//sequence number
    packet data; //the network layer packet
    unsigned int  padding;
}frame;

static int between(seq_nr aseq_nr bseq_nr c){
      if((a <= b && b < c) || (c < a && a <= b) || (b < c && c < a))
          return true;
      else
          return false; 
}
//add crc
static void put_frame(unsigned char *frame int len)
{
    *(unsigned int *)(frame + len) = crc32(frame len);
    send_frame(frame len + 4);
    phl_ready = 0;
}
//send data to physical layer
static void send_data(unsigned char fkseq_nr frame_nrseq_nr frame_expectedpacket buffer[])
{
    frame s;
    s.kind = fk;
    s.seq = frame_nr;//insert sequence number into frame
    s.ack = (frame_expected+ MAX_SEQ)%(MAX_SEQ+1);//piggyback ack

if(fk == frame_DATA)
memcpy(s.data.info buffer[frame_nr%NR_BUFS].info PKT_LEN);//insert packet into frame

if(fk == frame_NAK)
no_nak = false;  //one nak per frameplease

    dbg_frame(“Send DATA %d %d ID %d\n“ s.seq s.ack *(short *)s.data.info);
if (fk == frame_DATA)
      put_frame((unsigned char *)&s 3 + PKT_LEN);//put CRC following the frame
if(fk == frame_NAK||fk==frame_ACK)
put_frame((unsigned char *)&s 2);//put CRC following the frame
    if(fk == frame_DATA)
start_timer(frame_nr%NR_BUFS DATA_TIMER);
stop_ack_timer();//no need for separate ack frame
}

int main(int argc char **argv){
    
int eventarglen=0;
    int i;//contol the number of circle of arrived
    frame r;//scratch variable
    seq_nr next_frame_to_send;//the upper of the send‘s window
    seq_nr ack_expected;//the lower of the send‘s window
    seq_nr frame_expected;//the lower of the reciver‘s window
    seq_nr too_far;//the upper of the reciver‘s window
    seq_nr nbuffered;//currently window
    packet out_buf[NR_BUFS];//buffer for the outbound stream
    packet in_buf[NR_BUFS];//buffer for the in stream
    bool arrived[NR_BUFS];
    
    enable_network_layer();
    //disable_network_layer();//allow netword_layer_ready events
    ack_expected = 0;
    next_frame_to_send = 0;
    frame_expected = 0;
    too_far = NR_BUFS;
    nbuffered = 0;  
    for(i = 0;i < NR_BUFS;i++)
        arrived[i] = false;

protocol_init(argc argv); 
    lprintf(“Designed by chenchen_07415_071419 build: “ __DATE__“  “__TIME__“\n\n“);

    while(true){
        event = wait_for_event(&arg);
 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      47509  2009-12-01 14:32  数据链路层—选择性重传协议\datalink-A.log

     文件      59499  2009-12-01 14:32  数据链路层—选择性重传协议\datalink-B.log

     文件       6264  2009-12-01 19:03  数据链路层—选择性重传协议\datalink.c

     文件       3476  2009-10-19 16:46  数据链路层—选择性重传协议\datalink.dsp

     文件        524  2009-10-16 10:23  数据链路层—选择性重传协议\datalink.dsw

     文件     176162  2009-12-01 14:02  数据链路层—选择性重传协议\datalink.exe

     文件        518  2009-10-16 12:34  数据链路层—选择性重传协议\datalink.h

     文件     199324  2009-12-01 14:02  数据链路层—选择性重传协议\datalink.ilk

     文件      50176  2009-12-01 14:27  数据链路层—选择性重传协议\datalink.ncb

     文件      48640  2009-12-01 14:27  数据链路层—选择性重传协议\datalink.opt

     文件     427008  2009-12-01 14:02  数据链路层—选择性重传协议\datalink.pdb

     文件       1516  2009-12-01 14:02  数据链路层—选择性重传协议\datalink.plg

     文件      94208  2009-10-19 22:57  数据链路层—选择性重传协议\Protocol.dll

     文件       1831  2009-10-19 16:46  数据链路层—选择性重传协议\protocol.h

     文件       5932  2009-10-19 22:57  数据链路层—选择性重传协议\Protocol.lib

     目录          0  2010-01-02 12:54  数据链路层—选择性重传协议

----------- ---------  ---------- -----  ----

              1122587                    16


评论

共有 条评论