资源简介
北邮计算机网络实验 选择重传
实验一:数据链路层滑动窗口协议的设计与实现
效率大于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
相关资源
- 04741计算机网络原理知识点整理.docx(
- 并购重组资料(协议模板)
- 由浅入深,蓝牙4.0/BLE协议栈开发攻略
- 基于蓝牙4.0的设备通信方案设计与实
- ASUS BIOS 加NVME协议文件: Nvme.ffs NV
- 安卓QQ6.71协议源码易语言,qq协议源码
- 使用选择性重传协议实现UDP可靠通信
- modbus通讯协议详解
- h225协议 RAS信令
- 校园网络规划与设计课程设计
- 安卓协议QQ源码包附模块源码
- 用C 实现的对网络上的ARP数据包进行
- ns2下leach协议源码
- SOCKET 网络编程 计算机网络 作业 客户
- RDM协议数据幁结构
- ccna、ccnp习题六地址解析协议 (ARP)
- 计算机网络课程设计—ARQ协议模拟实
- ATA(ATAPI)接口指令协议硬盘基础知识
- ISO7816 协议标准
- USB助手(调试USB通信协议的工具) 源
- VxWorks TCPIP协议栈
- vc 编写的基于TCP协议的客户/服务器
- Skype 协议分析(2006版)
- 基于能量和距离的无线传感器网络分
- 无线传感器网络基于分簇的路由协议
- 基于分层的矿井工作面WSN路由协议
- 托利多电子秤ind245协议读取串口数据
- 基于89C51计算机锁定加密键盘设计
- 基于FPGA多协议转换网关设计
- 易语言QQ协议PC端易语言源码.rar
评论
共有 条评论