资源简介
北邮计算机网络实验 选择重传
实验一:数据链路层滑动窗口协议的设计与实现
效率大于60%,采用CRC校验技术,网络层分组长度固定为256字节
代码片段和文件信息
#include
#include
#include
#include “protocol.h“
#include “datalink.h“
void printData(char *p int size);
typedef unsigned char seq_nr;
typedef unsigned char frame_kind;
typedef struct{unsigned char data[PKT_LEN];} packet;
typedef enum{network_layer_ready physical_layer_ready frame_arrive data_timout ack_timeout chksum_error} event_type;
typedef enum{F T} mybool;
typedef struct
{
frame_kind kind; /* frame_DATA */
seq_nr ack;
seq_nr seq;
packet info; /* packet */
unsigned char padding[4]; /* memory space used for crc code 32 bit */
} frame;
mybool no_nak = T; /* no nak has beem yet */
static void Inc(seq_nr *seq)
{
*seq = (*seq + 1) % (MAX_SEQ + 1);
}
static mybool between(seq_nr a seq_nr b seq_nr c)
{
/*return T if a <= b circulaly; F otherwise*/
return ((a <= b) && (b < c)) || ((c < a) && (a <= b)) || ((b < c) && (c < a));
}
static void send(frame_kind fk seq_nr frame_nr seq_nr frame_expected packet buf[])
{
/* construct frame and send */
frame s; /* tmp variable */
s.kind = fk; /* s.kind = data/ack/nak */
if (fk == frame_DATA)
memcpy((char*)&s.info (char*)&buf[frame_nr % NR_BUFS] PKT_LEN); /* store the packet */
s.seq = frame_nr; /* only meaning for data */
s.ack = (frame_expected + MAX_SEQ) % (MAX_SEQ + 1);
if (fk == frame_NAK)
no_nak = F;
/* compute the crc code the crc code is in the padding memory */
*(unsigned int*) ((unsigned char*)&s + PKT_LEN + 3) = crc32((unsigned char*)&s PKT_LEN + 3);
/* send the frame to the physical layer */
send_frame((unsigned char*)&s sizeof(s));
dbg_event(“组装之后的 !!\n“);
printData((char*)&s sizeof(s));
//printf(“CRC send“);
//printData(s.padding4);
/* warning: short may not be 2 bytes according to the computer */
if (fk == frame_DATA)
dbg_frame(“Send DATA seq:%d ack:%d ID %d\n“ s.seq s.ack *(short *)(&s.info));
else if (fk == frame_ACK)
dbg_frame(“Send ACK seq:%d\n“ s.seq);
else if (fk == frame_NAK)
dbg_frame(“Send NAK seq:%d\n“ s.seq);
if (fk == frame_DATA) /* start the timeout if timeout repeat transmit */
start_timer(frame_nr % NR_BUFS DATA_TIMER);
stop_ack_timer(); /* no need for separate ack frame */
}
void protocol6()
{
int midstop=0;
seq_nr ack_expected = 0; /* lower edge of sender‘s window */
seq_nr next_frame_to_send = 0; /* upper edge of sender‘s window */
seq_nr frame_expected = 0; /* lower edge of receiver‘s window */
seq_nr too_far = NR_BUFS; /* uppder edge receiver‘s window + 1*/
packet out_buf[NR_BUFS]; /* buffers for the outbound stream*/
packet in_buf[NR_BUFS]; /* buffers for the inbound stream*/
mybool arrived[NR_BUFS] = {F}; /* inbound bit map intial to all F */
seq_nr nbuffered = 0; /* the size of buffered */
frame r; /* tmp variable */
int arg = MAX_SEQ + 1; /* para */
int len = 0; /* the length of received packet*/
unsigned crc_ret = 0;
event_type even
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 134324 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\datali
文件 134419 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\datali
文件 8496 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\datali
文件 3539 2012-11-29 23:08 数据链路层滑动窗口协议的设计与实现\datali
文件 524 2009-10-16 10:23 数据链路层滑动窗口协议的设计与实现\datali
文件 176212 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\datali
文件 836 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\datali
文件 229992 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\datali
文件 50176 2012-11-29 23:08 数据链路层滑动窗口协议的设计与实现\datali
文件 53760 2012-11-29 23:08 数据链路层滑动窗口协议的设计与实现\datali
文件 484352 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\datali
文件 1330 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\datali
文件 13868 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\Debug\datali
文件 198560 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\Debug\datali
文件 41984 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\Debug\vc60.idb
文件 53248 2012-11-29 21:37 数据链路层滑动窗口协议的设计与实现\Debug\vc60.pdb
文件 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 2012-11-29 23:16 数据链路层滑动窗口协议的设计与实现\Debug
目录 0 2012-11-29 23:16 数据链路层滑动窗口协议的设计与实现
----------- --------- ---------- ----- ----
1687591 21
相关资源
- 数据链路层滑动窗口协议的设计与实
- 使用Socket结合SMTP/POP3邮件协议发送和
- 计算机网络课程设计 小型企业网络设
- 对AODV协议进行了改进
- modbus通信协议例程
- 距离向量算法
- 简单网络时间协议( SNTP)
- linux下的实时语音聊天程序源码adpcm编
- 计算机网络课程设计——IP数据报流量
- 计算机网络课程设计-校园网规划与设
- 美国宝丽声DCT1088流量计通讯协议
- ISO16845标准协议
- 计算机网络课程设计-电子政务网站设
- VC编程实现使用WinInet通过HTTP协议读取
- 用430完成的IIC全协议
- rtsp协议详解中文.pdf
- 整车控制器和电机控制器通讯协议
- 中兴派能PYLON铁锂电池单体通信协议
- 计算机网络原理自考资料及课后习题
- 计算机网络课程设计单个/多个交换机
- ROS:实现串口解析GPS协议,并发布到
- 多通道多协议数据网关的设计
- 计算机网络帧的封装
- 计算机网络 邮件收发 课程设计报告
- S-MAC协议tcl文件NS2仿真
- 静态路由和RIP协议配置实验指导书
- 加油站卡机联动电脑加油机与监控
- 计算机网络滑动窗口协议GoBackN源码
- 安防测试用 pelco-d、p协议测试用 串口
- 利用winsock编程来实现FTP协议客户端
评论
共有 条评论