《2022年2022年计算机网络实验 2.pdf》由会员分享,可在线阅读,更多相关《2022年2022年计算机网络实验 2.pdf(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、杭 州 电 子 科 技 大 学实验报告学生姓名:韩民杨学 号:12081420 指导教师:吴端坡实验地点: 1#108 实验时间: 2015-4-24 一、实验室名称:1#108二、实验项目名称:计算机网络实验1 Coding on error dectecting algorithms(C+)三、实验学时:四、实验原理:C+编程五、实验目的:利用 C+ 编程 CRC16 校验及奇偶校验六、实验内容:Coding on error dectecting algorithms(C+) 1. Cyclic redundancy checkUsing the polynomials below to
2、 encode random generated data stream (40-100bits). Show the FEC, and encoded data frame. CRC-4 x4+x+1 ITU G.704 CRC-16 x16+x15+x2+1 IBM SDLC CRC-32 x32+x26+x23+.+x2+x+1 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS For the error patter listed below, what the conclusion does the receiver get? Can t
3、he receiver find the errors? 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 19 页 - - - - - - - - - Case Error pattern No error 0000 0000One error 1000.000Two errors 100.001Random errors Random error pattern 2. Parity check Using even or odd parity check on rand
4、om generated data stream (8-20bits). Show encoded data frame. For the error patter listed below, what the conclusion does the receiver get? Can the receiver find the errors? Case Error pattern No error 0000 0000One error 1000.000Two errors 100.001七、实验器材(设备、元器件) :PC 机一台,装有 C+集成开发环境。八、实验步骤:#include #i
5、nclude #include #include #include #include #define NO_ERROR 1 #define ONE_ERROR 2 #define TWO_ERROR 3 #define RANDOM_ERROR 4 #define RESULT 1 #define CRC 0 #define Parity 0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 19 页 - - - - - - - - - #define check 1 in
6、t flag_parity;/ 判断奇偶校验void ByteToBit(char* out,const char* in,int bits); void input_message(char*message); int xor(char *p, char *d,int len); char *crc_function(char *str_p,int len,char *dividend,int len_d,int type,char *crc_p ); char Parity_check(char *message_output,int length,int mode); void main
7、() int pattern = 0; int channel_way =0; char message8=NULL;/ data that produced by chance char message_output1000 = NULL; char message_crc = NULL;/transport int length; /messages length /*这是固定了为 4 为的 crc,当这里改变是就可以直接改变crc 的长度了 */ char dividend=10011; char message_input1000=; /*这里可以更改数值当时16 为 crc 的时候,
8、此时的len_d为 15*/ int len_d=5;/被除数长度设置char flag; while (true) fflush(stdin); /任意输入数据printf(please input the message!n); gets(message); printf(A need to send this message:%sn,message); length = strlen(message); ByteToBit(message_output,message,length*8); for(int k = 0;klength*8;k+) printf(%d,message_out
9、putk); message_inputk = message_outputk+48; pattern = 0; channel_way =0; printf(n); printf(Coding on error dectecting algorithmsn); printf( 1.Cyclic redundancy checkn); printf( 2.Parity check n); printf( please chice pattern: n); /*选择进入的检错模式 */ scanf(%d,&pattern); fflush(stdin);/清空缓存区if(pattern = 1)
10、 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 19 页 - - - - - - - - - printf(*n); printf( analog channeln); printf( please choice the way of errorn); printf(* 1.No error *n); printf(* 2.One error *n); printf(* 3.Two errors *n); printf(* 4.Random errors *n); sc
11、anf(%d,&channel_way); printf(ncrc :); /进行 crc 检测int len = length*8; /printf(%dn,len); char *crc = NULL; crc = crc_function(message_input,len,dividend,len_d,CRC,NULL); for(int i = 0;i len_d;i+) printf(%c,*crc); message_inputlength*8+i = *crc; crc+=1; printf(n); /*模拟信道Case Error pattern No error 0000
12、0000One error 1000.000Two errors 100.001Random errors Random error pattern*/ if(channel_way = NO_ERROR) char *result = NULL; int flagg=0; printf( 信道中传输数据: ); for(int f =0;flength*8+len_d-1 ;f+) printf(%c,message_inputf); printf(n); printf( 正在检错中 .n); printf( 检错结果: ); fflush(stdin); result = crc_func
13、tion(message_input,len,dividend,len_d,RESULT,crc-len_d); for(int i = 0;i len_d-1;i+) printf(%c,*result); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 19 页 - - - - - - - - - if(*result) - 48 != 0) printf(n error! n); flagg =1; break; result+=1; if(flagg = 0) p
14、rintf(n no error! n); if(channel_way = ONE_ERROR) char *result = NULL; message_input0 = (message_input0 - 48)(1-48) + 48; printf( 信道中传输数据: ); for(int f =0;flength*8+len_d-1 ;f+) printf(%c,message_inputf); printf(n); printf( 正在检错中 .); printf( 检错结果: ); result = crc_function(message_input,len,dividend,
15、len_d,RESULT,crc-len_d); for(int i = 0;i len_d-1;i+) if(*result = 1) printf(data error! n); break; else continue; result+=1; if(channel_way = TWO_ERROR) char *result = NULL; message_input0 = (message_input0 - 48)(1-48) + 48; message_inputlength*8-1 = (message_inputlength*8-1 - 48)(1-48) + 48; printf
16、( 信道中传输数据: ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 19 页 - - - - - - - - - for(int f =0;flength*8+len_d-1 ;f+) printf(%c,message_inputf); printf(n); printf( 正在检错中 .); printf( 检错结果: ); result = crc_function(message_input,len,dividend,len_d,RESULT,crc);
17、for(int i = 0;i len_d-1;i+) if(*result != 0) printf( data error! n); break; else continue; result+=1; if(channel_way = RANDOM_ERROR) char *result = NULL; int no; srand( (unsigned)time( NULL ) ); /初始化随机数no = rand()%length*8; message_inputno = (message_input0 - 48)(1-48) + 48; printf( 信道中传输数据: ); for(
18、int f =0;flength*8+len_d-1 ;f+) printf(%c,message_inputf); printf(n); printf( 正在检错中 .n); printf( 检错结果: ); result = crc_function(message_input,len,dividend,len_d,RESULT,crc); for(int i = 0;i len_d-1;i+) if(*result != 0) printf( data error! n); break; else continue; 名师资料总结 - - -精品资料欢迎下载 - - - - - - -
19、- - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 19 页 - - - - - - - - - result+=1; printf(*n); printf(n); printf(n); else printf(Please select the parity moden); printf( 1.Even parity n); printf( 2.Odd parityn); scanf(%d,&flag_parity); char m = Parity_check(message_input,length*8,Parity); printf(
20、在信道中传输的message:); message_inputlength*8 = m ; for(int message_number = 0;message_number=length*8;message_number+) printf(%c,message_inputmessage_number); printf(n); printf(*n); printf(* analog channel *n); printf(*please choice the way of error*n); printf(* 1.No error *n); printf(* 2.One error *n);
21、printf(* 3.Two errors *n); scanf(%d,&channel_way); if(channel_way = NO_ERROR) for(int f =0;flength*8;f+) printf(%c,message_inputf); printf( 正在检错中 .n); printf( 检错结果: ); char flag_parity_mode = Parity_check(message_input,length*8,check); if(flag_parity_mode = (message_inputlength*8) printf(no error!n)
22、; if(channel_way = ONE_ERROR) message_input0 = (message_input0 - 48)(1-48) + 48; for(int f =0;flength*8;f+) printf(%c,message_inputf); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 19 页 - - - - - - - - - printf( 正在检错中 .n); printf( 检错结果: ); char flag_parity_mod
23、e = Parity_check(message_input,length*8,check); printf( error!n); if(channel_way = TWO_ERROR) message_input0 = (message_input0 - 48)(1-48) + 48; message_inputlength*8-1 = (message_inputlength*8-1 - 48)(1-48) + 48; for(int f =0;flength*8;f+) printf(%c,message_inputf); printf( 正在检错中 .n); printf( 检错结果:
24、 ); char flag_parity_mode = Parity_check(message_input,length*8,check); printf(no error!n); printf(*n); printf(n); printf(n); fflush(stdin); printf(do you want to continue?y/nn); scanf(%c,&flag); if(flag = y) continue; else break; /* /function: 完成字节转换成位的功能/输入字符: In 输出的二进制: Out */ void ByteToBit(char
25、* out,const char* in,int bits) /char out_11000 = ; int i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 19 页 - - - - - - - - - / printf(%sn,in); for(i=0;i3(i&7)&1; / printf(%d:%dn,i,outi); /* /function: 完成异或除法/输入: *p *d /输出:直接将一次异或除法之后的结果覆盖*/ int xor(char *p,
26、char *d,int len=5) /p 为 message,d 为 crc 检测的中的 p int i=0; for(;ilen;i+) *p=(*p-48)(*d-48)+48; *p=*p+1; d=d+1; d=d-len; /d 重新指向最新的/ *p=*p-len+1;/p 后移一位return 0; /* /function: 完成 crc 检错以及 crc 计算/输入:传输字符: str_p 传输字符长度 len / 4 位的 crc 的检错方式len_d 是需要填 0 的个数/ type 用于判断显示计算传输之后的结果还是计算crc /输出: crc 或者计算传输之后的结果
27、*/ char *crc_function(char *str_p,int len,char *dividend,int len_d,int type,char *crc_p=NULL) int i; int j; char *input_p=(char *)malloc(sizeof(char)*(len+len_d-1); /申请空间char *input_p_tmp=NULL; input_p_tmp=input_p; /向指针指向的内存里存数据名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -
28、- - - 第 9 页,共 19 页 - - - - - - - - - for(i=0;ilen;i+) *input_p_tmp=str_pi; input_p_tmp+; /*补零个数为 len_d-1*/ for(i=0;ilen_d-1;i+) if(type=CRC) /如果是求 crc就补 0 *input_p_tmp=0; input_p_tmp+; else /如果是求结果就补crc *input_p_tmp=*crc_p; crc_p+; input_p_tmp+; input_p_tmp=NULL; /开始检查如果是1 则进行异或除法 ,如果是0 就指针向下移动一位.其中
29、0=48 for(j=0;jlen;j+) /*把 1 传入48 表示为0;*/ if(*input_p=48) /指针后移一位input_p=input_p+1; else xor(&input_p,dividend,len_d); return input_p; /* /function: 完成奇偶校验/输入:message_output 为需要传输的数据以及数据的长度lengh 奇偶校验的模式名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 19 页 - - - -
30、 - - - - - /输出:返回奇偶校验的结果*/ char Parity_check(char *message_output,int length,int mode) fflush(stdin); int j = 0; /偶校验if(flag_parity= 1) if(mode = Parity) for(int i = 0;ilength;i+) if(message_outputi = 49) j+; else continue; if(j%2 = 0) return 0; else return 1; else for(int i = 0;ilength;i+) if(messa
31、ge_outputi = 49) j+; else continue; if(j%2 = 0) return 0; else return 1; /奇校验else if(flag_parity = 0) if(mode = Parity) for(int i = 0;ilength;i+) if(message_outputi = 49) j+; else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 19 页 - - - - - - - - - continue;
32、if(j%2 = 1) return 0; else return 1; else for(int i = 0;ilength;i+) if(message_outputi = 49) j+; else continue; if(j%2 = 1) return 0; else return 1; 九、实验数据及结果分析:1.输入界面2.输入数据名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 19 页 - - - - - - - - - 3. CRC 校验1)No err
33、or 2)One error 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 19 页 - - - - - - - - - 3)Two errors 4)Random errors 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 19 页 - - - - - - - - - 4. 奇偶校验界面Even parity 1)No error 名师资料
34、总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 19 页 - - - - - - - - - 2)One error 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 19 页 - - - - - - - - - 3)Two errors Odd parity 1)No error 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
35、- - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 19 页 - - - - - - - - - 2)One error 3)Two errors 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 19 页 - - - - - - - - - 十、实验结论:奇偶校验, 1 位错可发现, 2 位错不可发现(奇数个错可发现,偶数个错不可发现) 。而 CRC 校验,奇数或偶数个错均能发现。说明CRC 校验比奇偶校验好的多。十一、总结及心得体会:通过本次实验, 加深了 C+的学习,虽然是结合网上的一些资料,但还是圆满完成,上次叫的作业写的不是很认真,望老师见谅,并且了解了 CRC 与奇偶校验的工作特性。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 19 页 - - - - - - - - -