- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
截断二进制指数退避算法的 C++实现
根据书本中对截断二进制指数退避的定义,编写如下 C++代码实现,以显示其原理。运行时可自主设定传送时发生
碰撞的概率,从而模拟特定网络环境。
程序会自动判断是否发生碰撞,记录重传次数,在重传前计算随机退避等待的时间。当重传 16 次仍未成功以及传
送成功时都会有相应提示,并显示传送成功时重传的总次数。
程序涉及 srand(seed) 和 sand() 库函数用来取随机数, 并用系统时间中的毫秒值 t.wMilliseconds 作为 srand(seed) 函数中的 seed 。
具体代码如下:
#includeiostream #includewindows.h #includectime using namespace std;
#define CONTENTION_PERIOD 51.20 // 以太网中争用期时间 2T (单位为微秒)
int GetRand(int min, int max) // 得到 min 至U max之间的一个随机数
{
SYSTEMTIME t;
GetSystemTime(t); // 取系统时间,格林威治时间
srand(t.wMilliseconds);
int r=rand()%(max-min+1)+min;
return r;
}
int TwoPowerK(int k) // 二的 k 次幂
{
int a=2;
int f=1;
while(k--)
{
f*=a;
}
return f;
}
int Resend(int i) // 第 i 次重传操作,计算重传退避时间,等待后重传
// (具休实现未定义,仅用于演示,显示退避时间 )
{
int r,MAX;
double BackTime;
cout 开始退避操作! endl;
if(i=10)
MAX=TwoPowerK(i)-1;
if(i10)
{
cout 重传次数超过 10,从 10 截止。 endl; MAX=TwoPowerK(10)-1;
}
cout随机数范围:0 到MAXendl;
r=GetRand(0,MAX);
cout 得到的随机数 r 为 :rendl; BackTime=r*CONTENTION_PERIOD;
cout 退避时间为 :51.2*r=BackTime 微秒 endl; Sleep(200); // 暂停 200 毫秒
cout 退避完成,开始重传! endl;
coutendl;
return 0;
}
void main()
{
cout*** 截断二进制退避指数算法演示 ***endl;
int k=0; // 用以表示重传的次数
int p; // 用于自己设置发生碰撞的概率
cout每次传送发生碰撞的概率为 P%,请输入p的值(范围为0到100之间的整数)
cinp;
coutendl;
while(1)
{ if(GetRand(1,100)=p) // 如果发生碰撞,其概率为 p%
{
k++; if(k=16) // 最大重传送次数为 16
{
cout*** 发生碰撞 ! 准备进行第 k 次重传! ***endl;
Resend(k); continue;
}
if(k16)
{
cout 重传 16 次仍未成功,丢弃本帧,向高层报告! endl; break;
}
} if(GetRand(1,100)p) // 如果没有发生碰撞,其概率为 1-p%
{
cout 本次未发生碰撞,传送成功!!共重传 k 次。 endl; break;
}
}
}
以下为部分运行结果:
1、将发生碰撞概率设定为 0%(不会发生碰撞),先后运行两次的结果:
可见每次都不用重传。
幵雄遇雄廉他! ssm?i^w:i)sji 得到酋谢机救r为
幵雄遇雄廉他! ssm?i^w:i)sji 得到酋谢机救r为J
追逹时间 5^:51. 24L-5L 29k? 退坯完飆.fflfeBft;
准螯堆打第厘汝畫恃]*** 幵怡用黑樣昨! 尊机蠡冠憎:U利3 咼刊的的机SE 丁肯山 退竜时间为汴I, A0MS枕 怦逓完I舐开铀■触
卓枚歩鬣主畳1??传送肢功I』共亶怯2次. WttSMaitt...
毎抚強送:找生駐擂的*1辜为肚 请?人卩的慣(范围制)剰100之间的势数)I 50
?理发生磁擢!准祐进石集】次■怙I ***
肝雄退渥1?指!
舟到 enavL?r^ji
间沟:5匚Al韦 说越w腔.幵跆■传¥
翁生建用!淮*逮行第龙欢■忡! ***
幵始遇屯■!!临! 變机 ?iHffl:i^Ja 得別的陶机Set沟m 迟避时间沟:时.2+0■确砂 审斑完喘?fflfiffr!
开捲用现檢岸! 站机霊范巾5封7 用到的陆机雜丁为洱
沟洛l?S*41闘托■
您可能关注的文档
- 我国货币政策有效性的微观基础研究.docx
- 我国资本流动性现状与趋势分析(doc9)(1).docx
- 我国铁路运输生产计划.docx
- 我国铁路旅行社.docx
- 我国银行业操作风险的启示以北京农商行违规放贷为例.docx
- 我国银行的分类.docx
- 我国陶瓷产品面临的反倾销现状及对策(初稿).docx
- 我国非营利组织存在的问题及对其看法(同名13929).docx
- 我国预算会计存在的问题与对策doc8.docx
- 我国饮用水水源地应急保护应借鉴的做法.docx
- 2024年吉林电子信息职业技术学院高职单招英语2016-2023年高频考点试题含答案解析.docx
- 2024年柳州职业技术学院高职单招英语2016-2023年高频考点试题含答案解析.docx
- 2024年海南体育职业技术学院高职单招英语2016-2023年高频考点试题含答案解析.docx
- 2024年武汉电力职业技术学院高职单招英语2016-2023年高频考点试题含答案解析.docx
- 2024年贵州城市职业学院高职单招英语2016-2023年高频考点试题含答案解析.docx
- 2024年晋中职业技术学院高职单招职业适应性测试历年【2016-2023】高频考点试题含答案解析.docx
- 2024年伊犁职业技术学院高职单招英语2016-2023年高频考点试题含答案解析.docx
- 2024年江苏经贸职业技术学院高职单招职业适应性测试历年【2016-2023】高频考点试题含答案解析.docx
- 2024年柳州城市职业学院高职单招职业适应性测试历年【2016-2023】高频考点试题含答案解析.docx
- 2024年达州职业技术学院高职单招职业适应性测试历年【2016-2023】高频考点试题含答案解析.docx
文档评论(0)