截断二进制指数退避算法c++.docx

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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闘托■

您可能关注的文档

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档