-
大小: 21KB文件类型: .rar金币: 2下载: 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
- 上一篇:中小公司工资管理系统
- 下一篇:全向轮机器人三轮结构控制
相关资源
- 清华大学 c 郑莉 ppt课件
- 清华大学郑莉C 语言程序设计课件
- 《编译原理》清华大学版中的pl0扩充
- 数据结构考前习题 清华大学出版社
- linux 网络实验 ftp程序
- 清华大学携手NetApp实现数据中心革新
- 情感词极值表,台湾大学NTUSD简体中文
- 数字电子技术基础 第6版清华大学阎石
- 信息安全工程师教程高清-清华大学
- 台湾大学NTUSD简体中文情感词典+知网
- 台湾大学NTUSD,知网情感分析用词语集
- 第一届全国中文知识图谱研讨会演讲
- 清华大学-王爱英-计算机组成原理课件
- 《计算机导论》- 张彦铎 清华大学出
- 基于内容图像检索技术 - 周明全、耿
- 市场营销学(第三版PPT 教学课件
- 清华大学应用信息论考博资料
- 清华大学计算机系网络课程之模式识
- 清华大学人工智能导论课件ppt格式
- 三个主流情感词典Hownet、NTUSD、清华大
- 汇编课件PPT全配套清华大学计算机系
- 高级计算机网络实验报告 ns3模拟数据
- 方保镕清华大学矩阵论+习题解答详解
- 北京科技大学计算机网络实验
- 计算机组成原理与汇编语言习题答案
- 计算机网络实验三运输层
- 清华大学 郑人杰、殷人昆著 实用软件
- 计算机网络课后答案清华大学出版社
- 矩阵论,清华大学出版社,方保镕等
- Zigbee无线通信实验指导书 (清华大学
评论
共有 条评论