-
大小: 21KB文件类型: .rar金币: 1下载: 0 次发布日期: 2021-06-19
- 语言: 其他
- 标签: 网络实验 NetRiver2000 清华大学
资源简介
上传的文件中包含《计算机网络实验系统 NetRiver2000》中的前九个实验,代码思路清晰,注释详尽
代码片段和文件信息
#include “sysinclude.h“
#include
#include
#include
#include
#include
using namespace std;
extern void SendframePacket(unsigned char* pData unsigned int len);
#define WINDOW_SIZE_STOP_WAIT 1
#define WINDOW_SIZE_BACK_N_frame 4
#define MAX_DATA_SIZE 100
typedef enum {data ack nak} frame_kind;
typedef struct
{
frame_kind kind; // kind of frame
unsigned int seq; // seq no of frame
unsigned int ack; // ack no of frame
unsigned char data[MAX_DATA_SIZE]; // data
}frame_head;
typedef struct
{
frame_head head; // frame head
unsigned int size; // frame sizei actual size of data
}frame;
/*
* 停等协议测试函数
* 参数说明:
*** pBuffer 指针,系统要发送或者已经接收到的帧内容,或者指向超时信息中
的超时帧序号
*** bufferSize pBuffer表示内容的长度
*** messageType 传入消息的类型,可选项由宏定义
* 返回值:
*** 0 发送成功
*** -1 发送失败
*/
int stud_slide_window_stop_and_wait(char *pBuffer
int bufferSize
UINT8 messageType)
{
/*
* 为方便后续两个函数的编程,我们定义两个队列:
*** waitQueue
****** 暂时无法发送的数据包(没有可用窗口),缓存在该队列中;
*** confirmQueue
****** 已经发送但是尚未确认的数据包,缓存在该队列中;
* 注:对于停止等待协议而言,confirmQueue其实不需要,我们可以使用一个结构体记录
* 尚未确认的数据包即可,因为该协议中,尚未确认的数据包数目永远不会大于1。
*/
static queueame> waitQueue;
static vectorame> confirmQueue;
static unsigned int expectedNo = 0; // 记录当前期望收到的数据包 seq no
/*
* 当上层传来一个新数据包 i 时,我们需要进行如下判断:
* Case1...messageType == MSG_TYPE_SEND
*** Subcase1...waitQueue 不为空
****** 我们采用 FIFO 方案,此时仅仅需要将 i 挂载到 waitQueue 队列尾部,
并且为之标记序号;
** Subcase2...waitQueue 为空
****** 我们需要进一步判断:
Subsubcase1...confirmQueue 为空
我们直接发送当前数据包
Subsubcase2...comfirmQueue 不为空
将数据包 i 挂载到 waitQueue 队列,并为之标记序号
*** Case2...messageType == MSG_TYPE_RECEIVE && ACK
****** 此时检查 ACK(i) 所响应的数据包 (i-1) 是否存在于 confirmQueue:
如果存在则直接删除,并且检查 waitQueue 中是否存在需要发送的数据包;
如果不存在,直接丢弃当前ACK数据包
*** Case3...messageType == MSG_TYPE_TIMEOUT
****** 如果 confirmQueue 中存在数据包,则重新发送这个数据包;
如果不存在,说明程序出现bug;
*/
switch( messageType )
{
case MSG_TYPE_TIMEOUT:
{
if ( confirmQueue.size() == 0 )
return -1;
assert(confirmQueue.size() == 1);
SendframePacket((unsigned char *)&confirmQueue.front()
confirmQueue.front().size);
return 0;
}
case MSG_TYPE_SEND:
{
frame sendframe;
memcpy( (void *)&sendframe.head
(void *)pBuffer
bufferSize );
sendframe.size = bufferSize;
if ( waitQueue.empty
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10322 2012-09-06 14:44 labs\lab01.cpp
文件 6621 2012-09-06 14:44 labs\lab02.cpp
文件 6510 2012-09-06 14:44 labs\lab03.cpp
文件 5204 2012-09-06 14:44 labs\lab04.cpp
文件 7137 2012-09-06 14:41 labs\lab05.cpp
文件 13459 2012-09-06 14:44 labs\lab06.cpp
文件 18633 2012-09-06 14:43 labs\lab07.cpp
文件 10256 2012-09-06 14:44 labs\lab08.cpp
文件 6606 2012-06-12 14:35 labs\lab09.cpp
目录 0 2012-09-07 18:42 labs
----------- --------- ---------- ----- ----
84748 10
- 上一篇:中小公司工资管理系统
- 下一篇:全向轮机器人三轮结构控制
相关资源
- 数据库原理第五版清华大学出版社
- wireshark抓包实验之HTTP
- 神经网络实验报告
- 西北工业大学软件学院计算机网络实
- 清华大学综合论文训练论文模板
- 停止等待ARQ模拟代码
- 计算机网络第五版 清华大学出版社
- 清华大学操作系统例题
- 清华大学电子系保研经验
- 清华大学现代通信原理课件 清华大学
- 清华大学校园地图高清3D版本
- 张尧学《操作系统》课件——清华大
- 数据结构习题集答案--清华大学版
- 忆阻神经网络实验
- 数字媒体技术导论-习题参考答案(清
- 2004-2008清华大学研究生考试计算机专
- 软件工程 清华大学 教学视频
- 清华大学电子工程系各研究所科研方
- 综合组网实验(eNSP)源码
- 清华大学-914-2019-真题回忆版.pdf
- 操作系统实用教程 第二版 清华大学
- 计算机网络实验基于Socket编程
- 计算机组成原理课后答案清华大学出
- 计算机图形学答案详细 清华大学出版
- 实验八-配置静态nat.pkt
- 计算机组成原理与汇编语言易小琳 朱
- omnet++超级立方体网络实验实现代码
- 华中科技大学计算机网络实验
- 清华大学计算机系本科生全部课程详
- 计算机网络严伟、潘爱民译 清华大学
评论
共有 条评论