资源简介
计算机网络滑动窗口协议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
相关资源
- 易语言取微云数据V1源码易语言取微云
- 易语言Excel多表对应处理源码
- 易语言取word打开、另存为对话框窗口
- 易语言EXCEL另存为CSV文件源码
- delphi百度地图源码
- 易语言EMS快递查询源码
- 易语言快递查询源码
- 易语言查询79种快递源码
- 易语言搜搜mp3源码
- 易语言迅雷补丁源码
- 易语言高仿迅雷5安装包源码
- bootstrap demo 源码大全
- springboot整合RabbitMQ实现延时队列的两
- 关于Spring MVC项目maven中通过fileupload上
- 新一代Lora芯片sx126x的驱动源码
- 易语言版迅雷视频转换器源码
- 今日头条源码.zip
- CtrlAltQ全屏截图源码
- 易语言全屏截图源码
- 百度图片识别源码.rar
- 易语言穿越火线辅助程序源码
- WINDOWS内核安全编程 寒江独钓 光盘源
- 寒江独钓-Windows内核安全编程(完整版
- DevExpress 15.1.6 源码 全 百度云
- 很久以前的MUD游戏源码和mudos
- 易语言屏幕锁屏工具源码
- 易语言Beep应用例程源码
- 易语言API的用法之beep源码
- 易语言Beep卡农源码
- 易语言DLL函数查看器源码
评论
共有 条评论