您好,欢迎访问三七文档
沈阳工程学院学生实验报告实验室名称:信息工程系软件实验室实验课程名称:计算机网络实验项目名称:CRC校验编程实现班级:软本094姓名:王诗娟陈志银刘云峰学号:02、10、14实验日期:2012年03月26日实验台编号:15指导教师:郑秀颖批阅教师(签字):成绩:一.实验目的掌握并理解CRC校验算法,编程实现CRC。二.实验内容1.设计CRC校验算法。.2.编程实现CRC校验。三.实验前的准备1.复习、熟悉CRC校验算法。2.编写好程序,上机调试。四.实验要求及实验软硬件环境【基本要求】1.掌握并理解CRC校验算法。2.编程实现CRC。3.完成实验报告。【实验组织方式】小组实验。【实验条件】配置有java运行环境的微机一台,MyEclipse。五.实验步骤1.掌握并理解CRC校验算法。2.设计发送界面。3.编程实现CRC校验。4.设计接收界面。5.调试并实现程序。6.参加答辩,并撰写实验报告。六.主要程序部分(Java语言实现)1.发送端主界面MainFrame.java的主要代码如下所示。jb.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){Stringinput1=newString(jtf1.getText());Stringinput2=newString(jtf2.getText());if(.equals(input1)||.equals(input2)||input1==null||input2==null){JOptionPane.showMessageDialog(jf,请输入。。。,错误,JOptionPane.ERROR_MESSAGE);}else{if(dealer.legal_binary(input1)){if(dealer.legal_g_p(input2)){StringcheckSum=dealer.get_cheksum(input1,input2);StringendResult=newString(input1+checkSum);jtf3.setText(checkSum);jtf4.setText(endResult);try{Stringtem=endResult+.+input2;fo.inputFile(tem);}catch(Exceptione1){e1.printStackTrace();}}else{JOptionPane.showMessageDialog(jf,输入的生成多项式不正确,错误,JOptionPane.ERROR_MESSAGE);}}else{JOptionPane.showMessageDialog(jf,输入不正确,错误,JOptionPane.ERROR_MESSAGE);}}}});jb2.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventarg0){jp1.setVisible(false);GetMessagegm=newGetMessage();Stringstr=;try{str=fo.outputFile();}catch(Exceptione){e.printStackTrace();}StringL=;StringR=;intk=str.length();for(inti=0;istr.length();i++){if(str.substring(i,i+1).equals(.)){L=str.substring(0,i).trim();R=str.substring(i+1,k).trim();}}gm.jtf1.setText(L);gm.jtf2.setText(R);Stringres=dealer.get_cheksum(str,R);gm.jtf3.setText(res);gm.setVisible(true);jf.add(gm);}});2.对发送和接收的处理类Dealer.java的主要代码如下所示。publicclassDealer{publicbooleanlegal_binary(Stringstr){for(inti=0;istr.length();i++){if(('0'!=str.charAt(i))&&('1'!=str.charAt(i))){returnfalse;}}returntrue;}publicbooleanlegal_g_p(Stringstr){if((('1'==str.charAt(0))&&('1'==str.charAt(str.length()-1))&&legal_binary(str))){returntrue;}returnfalse;}publicStringBuffermontage(StringBuffersb,intlength){for(inti=0;ilength-1;i++){sb.append(0);}returnsb;}publicStringget_cheksum(Stringdata,Stringgenerateor_polynomial){StringBufferdata_=newStringBuffer(data.toString());StringBufferg_p_=newStringBuffer(generateor_polynomial.toString());intg_p_length=g_p_.length();data_=montage(data_,g_p_length);intd_length=data_.length();for(inti=0;i=(d_length-g_p_length);i++){Stringsub=data_.substring(0,g_p_length);StringBuffertemp=newStringBuffer();if(sub.charAt(0)=='0'){data_=newStringBuffer(data_.substring(1));}else{for(intj=1;jg_p_length;j++){if(sub.charAt(j)!=g_p_.charAt(j)){temp.append(1);}else{temp.append(0);}}data_=data_.replace(0,g_p_length,temp.toString());}}Stringcheksum=data_.toString();returncheksum;}3.文件读取类FileOperation.javaimportjava.io.*;publicclassFileOperation{publicvoidinputFile(Stringargs)throwsException{DataOutputStreamdos=newDataOutputStream(newFileOutputStream(d:\\open.txt));dos.writeBytes(args);dos.close();}publicStringoutputFile()throwsException{DataInputStreamdis=newDataInputStream(newFileInputStream(d:\\open.txt));Stringstr=dis.readLine();returnstr;}}4.接收端界面GetMessage.java5.程序入口Main.java的主要代码。publicclassMain{publicstaticvoidmain(String[]args){MainFramemf=newMainFrame();}}}七.结果分析运行结果如图1和图2所示。图1.发送方运行结果图2.接收方运行结果八.个人总结CRC校验的基本思想是:利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。解题基本思路是:对于一个二进制序列,求其的CRC码时,首先让其左移相应的位数,比如16位的CRC码,即让二进制序列左移16位。然后除以多项式G(X),所得的余数就是所要求的CRC码。最后将其与二进制序列整合就是输出的序列。在验证接受是否有误时,把接收的序列再除以多项式G(X),如果余数为0则表示接受的无误则说明传输中无错误发生,否则说明传输有误。经过本次关于CRC校验的实验,我们对CRC校验更深一层的理解并且重新温习了一下java的界面编程。虽然过程中遇到了许多困难,但是经过查询各种资料我们也都一一顺利的解决,最终完成了本次实验。教师评语教师签字:年月日
本文标题:CRC实验报告
链接地址:https://www.777doc.com/doc-5208901 .html