#include <stdio.h>
#include <string.h>
#include "protocol.h"
#include "datalink.h"
#define DATA_TIMER 3000
#define ACK_TIMER 1500
#define MAX_SEQ 7
void inc(unsigned char* number)
{
(*number)++;
if(*number==MAX_SEQ+1)
*number=0;
}
struct FRAME {
unsigned char kind; /* FRAME_DATA */
unsigned char ack;
unsigned char seq;
unsigned char data[PKT_LEN];
unsigned int padding;
};
struct ACK_FRAME {
unsigned char kind; /* FRAME_DATA */
unsigned char ack;
unsigned int padding;
};
static unsigned char frame_nr = 0; //next frame to send
static unsigned char ack_expected = 0;
static unsigned char buffer[MAX_SEQ+1][PKT_LEN]; //
static unsigned char nbuffered = 0; //缓冲区大小
static unsigned char frame_expected = 0;
static int phl_ready = 0;
static void put_frame(unsigned char *frame, int len)
{
*(unsigned int *)(frame + len) = crc32(frame, len);
send_frame(frame, len + 4);

本文详细介绍了如何使用C语言实现Go Back N协议,包括其工作原理、数据包发送与接收过程,并探讨了带有ACK确认机制的实现细节,为理解网络协议提供了实践案例。
最低0.47元/天 解锁文章
2593

被折叠的 条评论
为什么被折叠?



