资源描述:
《计算机网络实验报告-云南大学-李海-实验九》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验九、链路层实验——基于CRC编码的检错程序的实现专业:软件工程学号:20121120256姓名:周坤指导教师:李海一、实验目的1、通过实验,掌握CRC编码和解码的原理。2、掌握基于CRC编码的差错检测技术。二、实验指导现在计算机网络广泛采用的差错检测技术是基于CRC(cyclicredundancycheck)循坏冗余检测编码,CRC也称为多项式编码(polynomialcode),CRC算法非常容易用硬件实现。CRC编码操作如下:对给定的数据D,发送者选择r个附加位,追加到D的末尾,形成d+r位的新位型,该位型正好
2、能被G模2除尽。其中,G称为生成器。CRC编码算法实现:1、选择生成多项式G,其最高次方为“即r+1位的二进制位串2、计算D・2「,即在数据D后面补r个0,构成d+r位的位串3、按模2除法求(D・27G)的余数R4、从D・2「中模2加上R,得到新的数据T,即加了CRC的帧三、实验要求1、设置一个d位的数据D,r+1位的多项式G,生成CRC码,并把此CRC码作为数据帧进行传送。2、编写两个子稈序,分别实现CRC编码和CRC解码,在主函数中对子程序进行调用。解码子程序应能根据解码情况判断出接收到的数据帧是否出错,并给出提示。
3、3、要求分别以正确和错误的数据来检验此检错程序。4、将编写程序的源代码加必要注释和程序运行结果一起填入实验报告屮。提示:1、编写程序时数据直接用二进制数,可能用到位操作符,异或)和*(左移)。2、在设置错误的编码时,错误位数最好不要超过r+1位。代码:#include#include#include#includeusingnamespacestd;typedefbitset<16>CRCCode;〃二进制数的最大长度为位intGetCodeSize(
4、constCRCCode&);//获取二进制编码长度CRCCodeMoerchufa(constCRCCode&,constCRCCode&);//模二运算函数返回值是余数CRCCodeCRC(constCRCCode&,constCRCCode&);//编码函数boolCRCJiaoyan(constCRCCode&,constCRCCode&);//crc校验函数intmain(){stringstrl,str2,str4;printf(”请输入第一个二进制数:”);cin»strl;printfC1请输入第二个二进
5、制数:”);cin»str2;CRCCodexl(strl);CRCCodex2(str2);CRCCodestr3=CRC(xl,x2);printf("ttH);cout«str3«endl;printfC*请输入错误校验的二进制字符串:”);cin»str4;CRCCodex4(str4);if(CRCJiaoyan(x4,x2)){printf(ntt校验成功!”);getchar();getchar();}else{printf(ntt校验失败");getchar();getchar()
6、;}intGetCodeSize(constCRCCode&Code)//获取二进制编码长度函数{inti=15;while((i>=())&&(JCode.test(i)))returni;CRCCodeCRC(constCRCCode&SourceCode,constCRCCode&Generator)//编码函数{CRCCodetmp(SourceCode);intGeneratorCodeSize=GetCodeSize(Generator);tmp=tmp«GeneratorCodeSize;//计算tem左移
7、tmp=Moerchufa(tmp,Generator);tmp=tmp
8、(SourceCode«GeneratorCodeSize);returntmp;CRCCodeMoerchufa(constCRCCode&cl,constCRCCode&c2)〃模二运算函数{CRCCodetmp(c1);intclSize=GetCodeSize(tmp);intc2Size=GetCodeSize(c2);while(clSize>=c2Size){CRCCodetmpc2(c2);intj=clSize-c2Size;tm
9、pc2=tmpc2«j;}tmp=tmpAtmpc2;clSize=GetCodeSize(tmp);}returntmp;boolCRCJiaoyan(constCRCCode&DataCode,constCRCCode&Generator)//校验函数{CRCCodetmp=Moerchufa(DataCode,