计算机网络实验1.docx
《计算机网络实验1.docx》由会员分享,可在线阅读,更多相关《计算机网络实验1.docx(16页珍藏版)》请在冰豆网上搜索。
计算机网络实验1
杭州电子科技大学
实验报告
学生姓名:
韩民杨学号:
指导教师:
吴端坡
实验地点:
1#108实验时间:
2015-4-24
一、实验室名称:
1#108
二、实验项目名称:
计算机网络实验1
Codingonerrordectectingalgorithms(C++)
三、实验学时:
四、实验原理:
C++编程
五、实验目的:
利用C++编程CRC16校验及奇偶校验
六、实验内容:
Codingonerrordectectingalgorithms(C++)
1.Cyclicredundancycheck
Usingthepolynomialsbelowtoencoderandomgenerateddatastream(40-100bits).ShowtheFEC,andencodeddataframe.
CRC-4
x4+x+1
ITU
CRC-16
x16+x15+x2+1
IBMSDLC
CRC-32
x32+x26+x23+...+x2+x+1
ZIP,RAR,IEEE802LAN/FDDI,IEEE1394,PPP-FCS
Fortheerrorpatterlistedbelow,whattheconclusiondoesthereceivergetCanthereceiverfindtheerrors
Case
Errorpattern
Noerror
0000……0000
Oneerror
1000…..000
Twoerrors
100….001
Randomerrors
Randomerrorpattern
2.Paritycheck
Usingevenoroddparitycheckonrandomgenerateddatastream(8-20bits).
Showencodeddataframe.
Fortheerrorpatterlistedbelow,whattheconclusiondoesthereceivergetCanthereceiverfindtheerrors
Case
Errorpattern
Noerror
0000……0000
Oneerror
1000…..000
Twoerrors
100….001
七、实验器材(设备、元器件):
PC机一台,装有C++集成开发环境。
八、实验步骤:
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#defineNO_ERROR1
#defineONE_ERROR2
#defineTWO_ERROR3
#defineRANDOM_ERROR4
#defineRESULT1
#defineCRC0
#defineParity0
#definecheck1
intflag_parity;000
Twoerrors100….001
RandomerrorsRandomerrorpattern*/
if(channel_way==NO_ERROR)
{
char*result=NULL;
intflagg=0;
printf("信道中传输数据:
");
for(intf=0;fprintf("%c",message_input[f]);
printf("\n");
printf("正在检错中.......\n");
printf("检错结果:
");
fflush(stdin);
result=crc_function(message_input,len,dividend,len_d,RESULT,crc-len_d);
for(inti=0;i{
printf("%c",*result);
if((*result)-48!
=0)
{
printf("\nerror!
\n");
flagg=1;
break;
}
result+=1;
}
if(flagg==0)
printf("\nnoerror!
\n");
}
if(channel_way==ONE_ERROR)
{
char*result=NULL;
message_input[0]=((message_input[0]-48)^('1'-48))+48;
printf("信道中传输数据:
");
for(intf=0;fprintf("%c",message_input[f]);
printf("\n");
printf("正在检错中.......");
printf("检错结果:
");
result=crc_function(message_input,len,dividend,len_d,RESULT,crc-len_d);
for(inti=0;i{
if(*result=='1')
{
printf("dataerror!
\n");
break;
}
else
{
continue;
result+=1;
}
}
}
if(channel_way==TWO_ERROR)
{
char*result=NULL;
message_input[0]=((message_input[0]-48)^('1'-48))+48;
message_input[length*8-1]=((message_input[length*8-1]-48)^('1'-48))+48;
printf("信道中传输数据:
");
for(intf=0;fprintf("%c",message_input[f]);
printf("\n");
printf("正在检错中.......");
printf("检错结果:
");
result=crc_function(message_input,len,dividend,len_d,RESULT,crc);
for(inti=0;i{
if(*result!
='0')
{printf("dataerror!
\n");
break;
}
else
{continue;
result+=1;
}
}
}
if(channel_way==RANDOM_ERROR)
{
char*result=NULL;
intno;
srand((unsigned)time(NULL));.....\n");
printf("检错结果:
");
result=crc_function(message_input,len,dividend,len_d,RESULT,crc);
for(inti=0;i{
if(*result!
='0')
{
printf("dataerror!
\n");
break;
}
else
{
continue;
result+=1;
}
}
}
printf("************************************\n");
printf("\n");
printf("\n");
}
else
{
printf("Pleaseselecttheparitymode\n");
printf("parity\n");
printf("parity\n");
scanf("%d",&flag_parity);
charm=Parity_check(message_input,length*8,Parity);
printf("在信道中传输的message:
");
message_input[length*8]=m;
for(intmessage_number=0;message_number<=length*8;message_number++)
printf("%c",message_input[message_number]);
printf("\n");
printf("*************************************\n");
printf("******analogchannel******\n");
printf("***pleasechoicethewayoferror****\n");
printf("****error*****\n");
printf("****error*****\n");
printf("****errors*****\n");
scanf("%d",&channel_way);
if(channel_way==NO_ERROR)
{
for(intf=0;fprintf("%c",message_input[f]);
printf("正在检错中.......\n");
printf("检错结果:
");
charflag_parity_mode=Parity_check(message_input,length*8,check);
if(flag_parity_mode==(message_input[length*8]))
printf("noerror!
\n");
}
if(channel_way==ONE_ERROR)
{
message_input[0]=((message_input[0]-48)^('1'-48))+48;
for(intf=0;fprintf("%c",message_input[f]);
printf("正在检错中.......\n");
printf("检错结果:
");
charflag_parity_mode=Parity_check(message_input,length*8,check);
printf("error!
\n");
}
if(channel_way==TWO_ERROR)
{
message_input[0]=((message_input[0]-48)^('1'-48))+48;
message_input[length*8-1]=((message_input[length*8-1]-48)^('1'-48))+48;
for(intf=0;fprintf("%c",message_input[f]);
printf("正在检错中.......\n");
printf("检错结果:
");
charflag_parity_mode=Parity_check(message_input,length*8,check);
printf("noerror!
\n");
}
printf("************************************\n");
printf("\n");
printf("\n");
}
fflush(stdin);
printf("doyouwanttocontinuey/n\n");
scanf("%c",&flag);
if(flag=='y')
continue;
else
break;
}
}
/***********************************************
/function:
完成字节转换成位的功能
/输入字符:
In输出的二进制:
Out
************************************************/
voidByteToBit(char*out,constchar*in,intbits)
{
中'0'=48
for(j=0;j{
/*把1传入
48表示为"0";*/
if(*input_p==48)
{
入界面
2.输入数据
3.CRC校验
1)Noerror
2)Oneerror
3)Twoerrors
4)Randomerrors
4.奇偶校验
①界面
②Evenparity
1)Noerror
2)Oneerror
3)Twoerrors
③Oddparity
1)Noerror
2)Oneerror
3)Twoerrors
十、实验结论:
奇偶校验,1位错可发现,2位错不可发现(奇数个错可发现,偶数个错不可发现)。
而CRC校验,奇数或偶数个错均能发现。
说明CRC校验比奇偶校验好的多。
十一、总结及心得体会:
通过本次实验,加深了C++的学习,虽然是结合网上的一些资料,但还是圆满完成,上次叫的作业写的不是很认真,望老师见谅,并且了解了CRC与奇偶校验的工作特性。