资源简介
计算机网络滑动窗口协议GoBackN C程序源码

代码片段和文件信息
#include
#include
#include “protocol.h“
#include “datalink.h“
typedef struct{ //frames结构定义 由5个域kind、seq、ack和info padding
unsigned char kind; /* frame_DATA */
unsigned char ack;
unsigned char seq;
unsigned char info[PKT_LEN];
unsigned int padding;
} frame ;
static int phl_ready = 0; //对物理层状态记录
bool no_nak = true; /* no nak has been sent yet */
static bool between (seq_nr a seq_nr b seq_nr c) /*已接受的确认应答号应该小于下一个要发送的序列号*/
{
/*return true if a <=b < c circularly;false otherwise. */
if (((a <= b)&&(b < c))||((c < a)&&(a <= b))||((b < c)&&(c < a)))
return (true);
else
return (false);
}
static void put_frame(unsigned char *frame int len) //生成CRC-32 校验和,并且把这32 比特校验和附其后
{
*(unsigned int *)(frame + len) = crc32(frame len);
send_frame(frame len + 4); //函数send_frame ()用于将内存frame 处长度为len的缓冲区块向物理层发送为一帧
phl_ready = 0;
}
static void send_data(seq_nr frame_nrseq_nr frame_expectedpacket buffer[])
{
/*Construct and send a data frame. */
frame s;
s.kind = frame_DATA;
s.seq = frame_nr;
s.ack = (frame_expected + MAX_SEQ) %(MAX_SEQ + 1); /*将frame_expected-1,期望接受的是frame_expected,
而现在已经接收到的帧序号是frame_expected,所以捎带确认的ACK应该是frame_expected-1 */
memcpy(s.info &buffer[frame_nr].info PKT_LEN);
dbg_frame(“Send DATA %d %d ID %d\n“ s.seq s.ack *(short *)s.info);
put_frame((unsigned char *)&s 3 + PKT_LEN);
start_timer(frame_nr DATA_TIMER); //启动frame_nr号寄存器 时限DATA_TIMER
stop_ack_timer();
}
static void send_nak_frame(seq_nr frame_expected) /*发送NAK*/
{
frame s;
s.kind = frame_NAK;
s.ack = frame_expected; /*发送NAK 携带的ACK应该就是当前frame_expected帧*/ //pay attention!
no_nak = false;
dbg_frame(“Send NAK %d\n“ s.ack);
put_frame((unsigned char *)&s 2);
stop_ack_timer();
}
int main(int argc char **argv)
{
int len=0 arg event;
seq_nr next_frame_to_send; /* MAX_SEQ > 1; used for outbound stream */
seq_nr ack_expected; /* oldest frame as yet unacknowledged */
seq_nr frame_expected; /* next frame expected on inbound stream */
frame r; /* scratch variable */
packet buffer[MAX_SEQ+1]; /* buffers for the outbound stream */
seq_nr nbuffered; /* # output buffers currently in use */
seq_nr i; /* used to index into the buffer array */
ack_expected = 0; /* next ack expected inbound */
next_frame_to_send = 0; /* next frame going out */
frame_expected = 0; /* number of frame expected inbound */
nbuffered = 0; /* initially no packets are buffered */
protocol_init(argc argv);
disable_network_layer(); /*数据链路层在缓冲区满等条件下无法发送分组时通过disable_network_layer() 通知网络层;*/
lprintf(“Designed by 计科4班2组(杨培军、吴科桥、宋瑞)程序1:GoBackNbuild: “ __DATE__“ “__TIME__“\n“);
for(;;){
event = wait_for_event(&arg); /* four possibilities: see event_t
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-03-18 22:38 GoBackN\
文件 518 2010-11-30 19:02 GoBackN\datali
文件 10752 2010-12-08 23:16 GoBackN\datali
目录 0 2012-03-18 22:38 GoBackN\Debug\
文件 3581 2010-12-12 19:29 GoBackN\Debug\GoBackN-A.log
文件 3621 2010-12-12 19:29 GoBackN\Debug\GoBackN-B.log
文件 172108 2010-12-07 13:21 GoBackN\Debug\GoBackN.exe
文件 197556 2010-12-07 13:21 GoBackN\Debug\GoBackN.ilk
文件 10644 2010-12-07 13:21 GoBackN\Debug\GoBackN.obj
文件 220580 2010-12-07 12:58 GoBackN\Debug\GoBackN.pch
文件 443392 2010-12-07 13:21 GoBackN\Debug\GoBackN.pdb
文件 94208 2010-11-30 14:11 GoBackN\Debug\Protocol.dll
文件 1550624 2010-12-11 00:33 GoBackN\Debug\test5a.log
文件 1547472 2010-12-11 00:33 GoBackN\Debug\test5b.log
文件 41984 2010-12-12 19:28 GoBackN\Debug\vc60.idb
文件 53248 2010-12-07 13:21 GoBackN\Debug\vc60.pdb
文件 7260 2010-12-07 13:21 GoBackN\GoBackN.cpp
文件 3604 2010-12-01 13:00 GoBackN\GoBackN.dsp
文件 522 2010-12-01 12:59 GoBackN\GoBackN.dsw
文件 58368 2011-10-23 21:01 GoBackN\GoBackN.ncb
文件 53760 2011-10-23 21:01 GoBackN\GoBackN.opt
文件 1165 2010-12-07 13:21 GoBackN\GoBackN.plg
文件 13312 2010-12-08 23:16 GoBackN\GoBackN.suo
文件 94208 2010-11-30 14:11 GoBackN\Protocol.dll
文件 2344 2010-12-12 19:28 GoBackN\protocol.h
文件 5932 2010-11-30 14:12 GoBackN\Protocol.lib
相关资源
- E4A无障碍跨程序操作类库(带源码、
- 设备管理系统源码
- 安卓wifi直连app源码
- 04741计算机网络原理知识点整理.docx(
- 我的世界源码(易语言版)
- labview编程软件滤波器以及编写程序设
- 我的界面(visual foxpro)源码
- 易语言:一键cf基址源码
- The Secret Path 3D 3D魔方迷宫[源码][scra
- scratch垃圾分类源码(最终版本).sb
- 安卓QQ6.71协议源码易语言,qq协议源码
- 编译原理实验工具及参考源码(lex&
- E盾偷后台工具源码
- UNIX/LINUX编程实践教程的源码
- 十以内加减法练习 powerbuilder源码
- 农场开发项目
- OCR源码
- PLC上位机编程软件
- 用foobar2000听google音乐[更新一下]
- 学生信息管理系统源码
- 用VC 编写的仿QQ聊天室程序源代码
- 毕业论文之温度传感器DS18B20(源码
- 可自定义导航网站源码
- 栅栏填充算法源码(VC)
- msp430F149操作红外接收模块源码
- [免费]图像识别c 源码
- 周易排盘源码
- 校园网络规划与设计课程设计
- RSA算法源码
- 一个人脸识别程序源码
评论
共有 条评论