华中科技大学计算机网络实验二报告
- 格式:doc
- 大小:1.07 MB
- 文档页数:19
课程实验报告课程名称:专业班级:计算机科学与技术1003班学号:姓名:鲁辰指导教师:报告日期:计算机科学与技术学院目录1实验二 Socket 编程(E-Mail)................... 错误!未定义书签。
实验目的....................................... 错误!未定义书签。
实验要求....................................... 错误!未定义书签。
实验内容....................................... 错误!未定义书签。
实验过程....................................... 错误!未定义书签。
需求分析................................... 错误!未定义书签。
界面....................................... 错误!未定义书签。
写信....................................... 错误!未定义书签。
收信....................................... 错误!未定义书签。
实验体会....................................... 错误!未定义书签。
2 实验2 网络组建与实施............................. 错误!未定义书签。
实验目的....................................... 错误!未定义书签。
实验环境、要求................................. 错误!未定义书签。
实验实验环境............................... 错误!未定义书签。
实验要求.................................... 错误!未定义书签。
华中科技大学计算机网络实验(二)报告————————————————————————————————作者:————————————————————————————————日期:ﻩ计算机网络课程实验报告实验2:抗干扰编码姓名李蓝鑫院系自动化学院学号U201514280实验地点科技楼十二楼机房实验时间2018年5月3日实验目的:1. 了解抗干扰编码原理。
2、掌握海明编码和CRC编码的原理,能熟练计算实验内容:内容1:海明编码1.1海明编码原理将有效信息按某种规律分成若干组,每组安排一个校验位通过异或运算进行校验,得出具体的校验码;在接收端同样通过异或运算看各组校验结果是否正确,并观察出错的校校组,或者个出错的校验组的共同校验位,得出具体的出错比特位;对错误位取反来将其纠正;假设用N表示添加了校验码位后整个传输信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位数,它们之间的关系应满足:N=K+r≤2^r-1(是为了确保r位校验码能校验全部的数据位,因为r位校验码所能表示的最大十进制数为2^r-1,同时也确保各位码本身不被其他校验码校验)。
海明码的校验码的位置必须是在2n次方位置(n从0开始,分别代表从左边数起分别是第1、2、4、8、16……),信息码也就是在非2n次方位置第i位校验码从当前校验码位开始,每次连续校验i位后再跳过i位,然后再连续校验i位,再跳过i位,以此类推。
确定每个校验码所校验的比特位:1.2海明编码程序流程图1.3交互界面设计编码:原码序列从“输入序列”编辑框输入,点击“编码”按钮在“编码序列”编辑框内输出编码序列,对输入编码要求为二进制输入译码:编码序列从“输入序列”编辑框输入,点击“译码”按钮在“译码序列”编辑框内输出译码序列,若译码错误会有响应的报错和纠错,对输入序列有不小于三位和二进制序列的要求1.4核心代码与注释输入序列框callback%做输入检测,检测是否是“0”“1”输入,否则报错temp_str=get(handles.input,'String');num_char=unique(temp_str);%unique函数获得输入字符串中不同字符的字符串if length(num_char)==2 %如果字符串长度为2if num_char(2)=='1' %第二个字符不是“1”说明字符串中有其他字符else set(handles.input,'String','0000');errordlg('只能输入1和0','输入错误');endelseif length(num_char)==1 %如果字符串长度为1,判断“1”还是“0",否则报错if num_char(1)=='0'elseif num_char(1)=='1'elseset(handles.input,'String','0000');errordlg('只能输入1和0','输入错误');endelse %如果字符串长度不为2,直接报错set(handles.input,'String','0000');errordlg('只能输入1和0','输入错误');End编码按钮callback(编码核心)%获取输入字符串temp_str=get(handles.input,'string');%获取字符串长度len_str=length(temp_str);%转存原码字符串长度备用k=len_str;%初始化需要插入的校验码的位数r=0;%根据海明编码的2^(r)-1)<(k+r)要求,计算校验码位数while((2^(r)-1)<(k+r))r=r+1;end%把字符串数组转成0和1的数组,便于处理for i=1:1:len_strif temp_str(i)=='1'yuan(i)=1;%原码数组为yuanelseyuan(i)=0;endend%把求得相应位数的校验码,用0插入原码中得到新码j=0;m=1;for i=1:1:(k+r)if i==2^(j) %如果该位置为2的次方,则插入校验码xin(i)=0;j=j+1;elsexin(i)=yuan(m);m=m+1;endend%进行海明编码odd=0;%用于计算每位校验码负责校验的位置的和for j=1:1:r %共有r位校验码,需要计算r次n=1; %初始化循环变量i=1;while((n*2^(j-1)+i-1)<=(k+r))%当没有超过数组长度时继续循环if i>(2^(j-1)) %如果本段的编码已经加完i=1; %则调转到下一段,也就是隔一个2^(j-1)的段再进行累加n=n+2;else %累加odd=odd+xin(n*2^(j-1)+i-1);i=i+1;endendif mod(odd,2)==0 %判断是否为偶数xin(2^(j-1))=0; %若为偶数,则在对应的校验位插入0 elsexin(2^(j-1))=1; %若为奇数,则在对应的校验为插入1 endodd=0;end%编码完毕,把数组转换成字符串用于输出for i=1:1:(k+r)if xin(i)==1output_str(i)='1';elseoutput_str(i)='0';endendset(handles.out,'String',output_str);译码按钮callback(原理与编码基本相同)%获得译码序列字符串temp_str=get(handles.input,'string');len_str=length(temp_str);%判断输入序列长度是否满足要求,不满足报错返回if len_str<3errordlg('译码最低输入位数为3位','输入出错');elsek=len_str;%编码中信息码的个数r=len_str;%编码中校验码的个数while((2^(r)-1)>=len_str)r=r-1;endr=r+1;%找到校验码的个数k=len_str-r;for i=1:1:len_str%得到所有编码数组if temp_str(i)=='1'xin(i)=1;elsexin(i)=0;endend%提取出信息编码数组m=1;j=0;for i=1:1:(k+r)if i==2^(j)j=j+1;elseyuan(m)=xin(i);m=m+1;endend%重新偶校验,原理同编码odd=0;for j=1:1:rn=1;i=1;while((n*2^(j-1)+i-1)<=(k+r))if i>(2^(j-1))i=1;n=n+2;elseodd=odd+xin(n*2^(j-1)+i-1);i=i+1;endendif mod(odd,2)==0check(j)=0; %校验结果存在check数组中elsecheck(j)=1;endodd=0;end%把check数组也就是校验结果转成十进制数num_wrong=0;for j=1:1:rnum_wrong=num_wrong*2;if check(r-j+1)==1num_wrong=num_wrong+1;endend%判断校验是否正确,为0则正确if num_wrong==0for m=1:1:kif yuan(m)==1output_str(m)='1';elseoutput_str(m)='0';endendset(handles.ym_out,'String',output_str);else%否则校验错误,对应位置取反后再输出if xin(num_wrong)==0xin(num_wrong)=1;elsexin(num_wrong)=0;endm=1;j=0;for i=1:1:(k+r)if i==2^(j)j=j+1;elseyuan(m)=xin(i);m=m+1;endendfor m=1:1:kif yuan(m)==1output_str(m)='1';elseoutput_str(m)='0';endendset(handles.ym_out,'String',output_str);errordlg(['校验码第',num2str(num_wrong),' 位出错,对应位置取反后得到正确解码为',output_str],'校验出错');endend1.5程序执行测试1.5.1 编码测试①正常编码1.5.2 译码测试①输入报错②正常解码③解码错误与纠正内容2:CRC编码2.1 CRC编码原理在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。
计算机网络实验报告(6篇)计算机网络实验报告(通用6篇)计算机网络实验报告篇1一、实验目的1、熟悉微机的各个部件;2、掌握将各个部件组装成一台主机的方法和步骤;3、掌握每个部件的安装方法;4、了解微型计算机系统的基本配置;5、熟悉并掌握DOS操作系统的使用;6、掌握文件、目录、路径等概念;7、掌握常用虚拟机软件的安装和使用;8、熟悉并掌握虚拟机上WINDOWS操作系统的安装方法及使用;9、掌握使用启动U盘的制作和U盘安装windows操作系统的方法;10、了解WINDOWS操作系统的基本配置和优化方法。
二、实验内容1.将微机的各个部件组装成一台主机;2.调试机器,使其正常工作;3.了解计算机系统的基本配置。
4.安装及使用虚拟机软件;5.安装WINDOWS7操作系统;6.常用DOS命令的使用;7.学会制作启动U盘和使用方法;8.WINDOWS7的基本操作;9.操作系统的基本设置和优化。
三、实验步骤(参照实验指导书上的内容,结合实验过程中做的具体内容,完成此项内容的撰写)四、思考与总结(写实验的心得体会等)计算机网络实验报告篇2windows平台逻辑层数据恢复一、实验目的:通过运用软件R-Studio_5.0和winhe_对误格式化的硬盘或者其他设备进行数据恢复,通过实验了解windows平台逻辑层误格式化数据恢复原理,能够深入理解并掌握数据恢复软件的使用方法,并能熟练运用这些软件对存储设备设备进行数据恢复。
二、实验要求:运用软件R-Studio_5.0和winhe_对电脑磁盘或者自己的U盘中的删除的数据文件进行恢复,对各种文件进行多次尝试,音频文件、系统文件、文档文件等,对简单删除和格式化的磁盘文件分别恢复,并检查和验证恢复结果,分析两个软件的数据恢复功能差异与优势,进一步熟悉存储介质数据修复和恢复方法及过程,提高自身的对存储介质逻辑层恢复技能。
三、实验环境和设备:(1)Windows _P 或Windows 20__ Professional操作系统。
《计算机网络》课程实验报告ip.addr == 116.114.22.19 and http捉任何主机发出的Ethernet 802.3格式的帧(帧的长度字段<=1500), Ethereal 的capture filter 的filter string设置为:ether[12:2] <= 1500捕捉任何主机发出的DIX Ethernet V2(即Ethernet II)格式的帧(帧的长度字段>1500, 帧的长度字段实际上是类型字段), Ethereal的capture filter 的filter string设置为:ether[12:2] > 1500观察并分析帧结构,802.3格式的帧的上一层主要是哪些PDU?是IP、LLC还是其它哪种?答:PDU协议数据单元中,帧的上层PDU是IP分组,802.3将数据链路层分为LLC子层和MAC子层,IP分组分别要经过LLC和MAC层封装才交由物理层传输。
答:Ethernet 802.2将Ethernet II帧头的协议类型字段替换为帧长度字段,并加入LLC-802.2头,用以标记上层协议。
LLC头包含目的服务访问点(DSAP)、源服务访问点(SSAP)和控制(Control)字段。
捕捉并分析局域网上的所有ethernet broadcast广播帧,Ethereal的capturefilter 的filter string设置为:ether broadcast(1). 观察并分析哪些主机在发广播帧,这些帧的高层协议是什么?主要做什么用处?(2). 你的LAN的共享网段上连接了多少台计算机?1分钟内有几个广播帧?有否发生广播风暴?答:比如,222.20.67.218主机发的Broadcast帧的高层协议为ARP协议。
ARP为地址解析协议,简言之,在IP-以太网中,当一个上层协议要发包时,有了节点的IP地址,ARP就能提供该节点的MAC地址。
华中科技⼤学计算机⽹络实验报告计算机⽹络实验报告班级:电信0904姓名:XX学号:U200913693实验四:⽹络协议与Web通信⼀、实验⽬的1.了解⽹络协议数据单元的格式2.分析⽹络协议⼯作基本流程3.深⼊理解Web应⽤的通信过程⼆、实验内容1.⽹络协议数据单元分析通过wireshark抓取局域⽹数据包并分析各个层次的协议数据单元内容(1)以太⽹帧头(2)IP分组⾸部(3)ARP包(4)ICMP包(ping)2.Web原理实验(1)HTTP协议分析(2)通过socket编程模拟HTTP协议通信过程三、实验原理1.Web通信经过四个步骤:(1)建⽴连接(2)客户端发送HTTP REQUEST请求(3)服务器端接收请求,⽣成RESPONSE响应(4)关闭连接2.HTTP协议客户端浏览器或其他程序与Web服务器之间的应⽤层通信协议。
⼀般在Internet 上的Web服务器上存放的都是超⽂本信息,客户机需要通过HTTP协议传输所要访问的超⽂本信息。
四、实验内容及分析1.编译、执⾏参考程序本次实验提供了两个原始程序(NetServer.java和NetClient.java),它们可以实现⼀个服务器/客户端请求响应的完整过程。
Dos环境下先后编译执⾏NetServer.java与NetClient.java,即可得到⼀次完整的客户端向服务器请求并得到响应的完整过程,结果如下:2.修改、编写实验程序参考程序模拟了客户端与服务器之间的对话,但由于其之间交互的数据都是我们设定的⽽不含有http报头信息,因此不能和真正的web服务器与浏览器对话,以下即为实现⾃制web服务器的⽅法(1)利⽤⾃制的服务器获取真正浏览器的HTTP Request 报头信息:运⾏⾃制的服务器,默认监听端⼝8080,在浏览器中输⼊以下⽹址http://127.0.0.1:8080/new/main/UserLoad.jsp,其中127.0.0.1为本机localhost地址,这样浏览器就会向⾃制服务器发出请求,服务器即可获取http request报头信息。
华中科技大学计算机学院《计算机网络安全》实验报告实验名称使用Google Hacking分析Web网站团队成员:注:团队成员贡献百分比之和为1教师评语:一.环境(详细说明运行的操作系统,网络平台,机器的IP地址)操作系统 Windows XP 专业版 32位 SP3 ( DirectX 9.0c ) 网络平台电信局域网IP地址 192.168.1.12二.实验目的1、掌握google搜索引擎的高级技巧2、掌握google搜索对Web安全信息搜集的技巧3、利用google hacking技术对一个Web站点进行安全信息搜集,并指出该站点可能的存在的安全问题。
三.实验步骤及结果(包括主要流程和说明)1、学习google高级搜索技巧:intitle: 搜索在网页标题中出现第一个关键词的网页。
filetype: 搜索特定扩展名的文件(如.doc .pdf .ppt)。
inurl: 返回的网页链接中包含第一个关键字的网页。
这样可以找到一些相关网站管理员的登录url,例如在上述搜索第八页有:2、利用google搜索引擎对Web站点安全相关信息进行搜集:intitle:"index of" etc/password可以找到一些因配置不合理而泄漏的密码文件。
打开其中某一条可以看到相应的一些文件,包括密码文件。
3、利用google搜索引擎对一个具体的Web站点进行分析:使用Google对华科校园网站进行测试。
先寻找网站的后台管理地址:Site: inurl:login可以看到一系列相关的后台登录页面:例如华科校友管理系统的登录页面:我选择对华科校友管理系统进行google hacking实验。
首先以site: intitle:index of / admin搜索一下管理员是否因安全意识不强而泄漏一些保密文件:没有得到任何结果。
使用site: intitle:index of /passwordsite: intitle:index of /secretsite: intitle:index of /passwdsite: intitle:index of /htppasswdsite: intitle:index of /master.wdsite: intitle:index of / etc / passwdsite: intitle:index of / passlist.txtsite: intitle:index of / auth_user_file.txtsite: intitle:index of / .bash_historysite: inurl:config.txtsite: inurl:loadsite: inurl:uploadsite: inurl:filesite: inurl:admin filetype:txtsite: inurl:admin filetype:dbsite: inurl:admin filetype:cfgsite: inurl:passwd filetype:txtsite: inurl:file_upload.php进行搜索都没有得到有用的秘密文件,也没有发现上传漏洞,所以可以认为华科校友管理系统对google hacking来说是比较安全的,或者说管理员的安全意识比较强,没有无意泄漏秘密文件。
华中科技大学计算机网络实验(二)报告————————————————————————————————作者:————————————————————————————————日期:ﻩ计算机网络课程实验报告实验2:抗干扰编码姓名李蓝鑫院系自动化学院学号U201514280实验地点科技楼十二楼机房实验时间2018年5月3日实验目的:1. 了解抗干扰编码原理。
2、掌握海明编码和CRC编码的原理,能熟练计算实验内容:内容1:海明编码1.1海明编码原理将有效信息按某种规律分成若干组,每组安排一个校验位通过异或运算进行校验,得出具体的校验码;在接收端同样通过异或运算看各组校验结果是否正确,并观察出错的校校组,或者个出错的校验组的共同校验位,得出具体的出错比特位;对错误位取反来将其纠正;假设用N表示添加了校验码位后整个传输信息的二进制位数,用K代表其中有效信息位数,r表示添加的校验码位数,它们之间的关系应满足:N=K+r≤2^r-1(是为了确保r位校验码能校验全部的数据位,因为r位校验码所能表示的最大十进制数为2^r-1,同时也确保各位码本身不被其他校验码校验)。
海明码的校验码的位置必须是在2n次方位置(n从0开始,分别代表从左边数起分别是第1、2、4、8、16……),信息码也就是在非2n次方位置第i位校验码从当前校验码位开始,每次连续校验i位后再跳过i位,然后再连续校验i位,再跳过i位,以此类推。
确定每个校验码所校验的比特位:1.2海明编码程序流程图1.3交互界面设计编码:原码序列从“输入序列”编辑框输入,点击“编码”按钮在“编码序列”编辑框内输出编码序列,对输入编码要求为二进制输入译码:编码序列从“输入序列”编辑框输入,点击“译码”按钮在“译码序列”编辑框内输出译码序列,若译码错误会有响应的报错和纠错,对输入序列有不小于三位和二进制序列的要求1.4核心代码与注释输入序列框callback%做输入检测,检测是否是“0”“1”输入,否则报错temp_str=get(handles.input,'String');num_char=unique(temp_str);%unique函数获得输入字符串中不同字符的字符串if length(num_char)==2 %如果字符串长度为2if num_char(2)=='1' %第二个字符不是“1”说明字符串中有其他字符else set(handles.input,'String','0000');errordlg('只能输入1和0','输入错误');endelseif length(num_char)==1 %如果字符串长度为1,判断“1”还是“0",否则报错if num_char(1)=='0'elseif num_char(1)=='1'elseset(handles.input,'String','0000');errordlg('只能输入1和0','输入错误');endelse %如果字符串长度不为2,直接报错set(handles.input,'String','0000');errordlg('只能输入1和0','输入错误');End编码按钮callback(编码核心)%获取输入字符串temp_str=get(handles.input,'string');%获取字符串长度len_str=length(temp_str);%转存原码字符串长度备用k=len_str;%初始化需要插入的校验码的位数r=0;%根据海明编码的2^(r)-1)<(k+r)要求,计算校验码位数while((2^(r)-1)<(k+r))r=r+1;end%把字符串数组转成0和1的数组,便于处理for i=1:1:len_strif temp_str(i)=='1'yuan(i)=1;%原码数组为yuanelseyuan(i)=0;endend%把求得相应位数的校验码,用0插入原码中得到新码j=0;m=1;for i=1:1:(k+r)if i==2^(j) %如果该位置为2的次方,则插入校验码xin(i)=0;j=j+1;elsexin(i)=yuan(m);m=m+1;endend%进行海明编码odd=0;%用于计算每位校验码负责校验的位置的和for j=1:1:r %共有r位校验码,需要计算r次n=1; %初始化循环变量i=1;while((n*2^(j-1)+i-1)<=(k+r))%当没有超过数组长度时继续循环if i>(2^(j-1)) %如果本段的编码已经加完i=1; %则调转到下一段,也就是隔一个2^(j-1)的段再进行累加n=n+2;else %累加odd=odd+xin(n*2^(j-1)+i-1);i=i+1;endendif mod(odd,2)==0 %判断是否为偶数xin(2^(j-1))=0; %若为偶数,则在对应的校验位插入0 elsexin(2^(j-1))=1; %若为奇数,则在对应的校验为插入1 endodd=0;end%编码完毕,把数组转换成字符串用于输出for i=1:1:(k+r)if xin(i)==1output_str(i)='1';elseoutput_str(i)='0';endendset(handles.out,'String',output_str);译码按钮callback(原理与编码基本相同)%获得译码序列字符串temp_str=get(handles.input,'string');len_str=length(temp_str);%判断输入序列长度是否满足要求,不满足报错返回if len_str<3errordlg('译码最低输入位数为3位','输入出错');elsek=len_str;%编码中信息码的个数r=len_str;%编码中校验码的个数while((2^(r)-1)>=len_str)r=r-1;endr=r+1;%找到校验码的个数k=len_str-r;for i=1:1:len_str%得到所有编码数组if temp_str(i)=='1'xin(i)=1;elsexin(i)=0;endend%提取出信息编码数组m=1;j=0;for i=1:1:(k+r)if i==2^(j)j=j+1;elseyuan(m)=xin(i);m=m+1;endend%重新偶校验,原理同编码odd=0;for j=1:1:rn=1;i=1;while((n*2^(j-1)+i-1)<=(k+r))if i>(2^(j-1))i=1;n=n+2;elseodd=odd+xin(n*2^(j-1)+i-1);i=i+1;endendif mod(odd,2)==0check(j)=0; %校验结果存在check数组中elsecheck(j)=1;endodd=0;end%把check数组也就是校验结果转成十进制数num_wrong=0;for j=1:1:rnum_wrong=num_wrong*2;if check(r-j+1)==1num_wrong=num_wrong+1;endend%判断校验是否正确,为0则正确if num_wrong==0for m=1:1:kif yuan(m)==1output_str(m)='1';elseoutput_str(m)='0';endendset(handles.ym_out,'String',output_str);else%否则校验错误,对应位置取反后再输出if xin(num_wrong)==0xin(num_wrong)=1;elsexin(num_wrong)=0;endm=1;j=0;for i=1:1:(k+r)if i==2^(j)j=j+1;elseyuan(m)=xin(i);m=m+1;endendfor m=1:1:kif yuan(m)==1output_str(m)='1';elseoutput_str(m)='0';endendset(handles.ym_out,'String',output_str);errordlg(['校验码第',num2str(num_wrong),' 位出错,对应位置取反后得到正确解码为',output_str],'校验出错');endend1.5程序执行测试1.5.1 编码测试①正常编码1.5.2 译码测试①输入报错②正常解码③解码错误与纠正内容2:CRC编码2.1 CRC编码原理在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。
对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。
根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。
校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。
用C(x)*2R 除以生成多项式G(x)得到的余数就是校验码。
若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得V(x)=A(x)g(x)=xRm(x)+r(x);其中:m(x)为K次原始的信息多项式,r(x)为R-1次校验多项式(即CRC校验和), g(x)称为生成多项式:g(x)=g0+g1x1+ g2x2+...+g(R-1)x(R-1)+gRxR发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。
2.2 CRC编码程序流程图2.3 交互界面设计编码:原码序列由“输入序列”编辑框输入,生成式由“生成式子”编辑框输入,点击“编码”按钮,在“输出序列”编辑框输出编码序列,对输入序列有二进制输入的要求,对生成式的输入除二进制输入以外,还有首位与末位不能为0的要求译码:编码序列由“输入序列”编辑框输入,生成式由“生成式子”编辑框输入,点击“译码”按钮,在“输出序列”编辑框输出译码序列,对输入序列有二进制输入的要求,还有不能小于生成式的长度,否则将报错,对生成式的输入除二进制输入以外,还有首位与末位不能为0的要求2.4 核心代码与注释编码按钮callback(编码核心)temp_str=get(handles.input,'string');len_str1=length(temp_str);for i=1:1:len_str1 %把原码的字符串转成数组,便于后续处理if temp_str(i)=='1'sz(i)=1;temp_sz(i)=1;elsetemp_sz(i)=0;sz(i)=0;endendtemp_crc=get(handles.crc,'string');len_scs=length(temp_crc)-1;for i=1:1:(len_scs+1) %把生成式的字符串转成数组if temp_crc(i)=='1'scs(i)=1;elsescs(i)=0;endend%%把原码后面加上CRC冗余编码,位数为CRC生成式长度-1for i=len_str1+1:1:(len_str1+len_scs)temp_sz(i)=0;sz(i)=0;end%从生成式长度位开始往后循环做类似于长除法的运算,实际为异或,注意首位为0时商0 forj=(len_scs+1):1:(len_str1+len_scs)iftemp_sz(j-len_scs)==0for i=1:1:(len_scs+1)if temp_sz(j-len_scs-1+i)==0temp_sz(j-len_scs-1+i)=0;elsetemp_sz(j-len_scs-1+i)=1;endendelsefor i=1:1:(len_scs+1)ifscs(i)==temp_sz(j-len_scs-1+i)temp_sz(j-len_scs-1+i)=0;elsetemp_sz(j-len_scs-1+i)=1;endendendend%把得到的冗余码余子式加上原码后面形成编码for i=(len_str1+1):1:(len_str1+len_scs)sz(i)=temp_sz(i);end%把数组转成字符串数组并输出for i=1:1:(len_str1+len_scs)ifsz(i)==1output_str(i)='1';elseoutput_str(i)='0';endendset(handles.output,'String',output_str);译码按钮callback(原理与编码基本相同)temp_str=get(handles.input,'string');len_str1=length(temp_str);for i=1:1:len_str1if temp_str(i)=='1'sz(i)=1;temp_sz(i)=1;elsetemp_sz(i)=0;sz(i)=0;endendtemp_crc=get(handles.crc,'string');len_scs=length(temp_crc)-1;iflen_str1<=len_scserrordlg('输入译码序列长度不能小于生成式序列长度','输入错误'); elsefor i=1:1:(len_scs+1)ﻩif temp_crc(i)=='1'ﻩﻩscs(i)=1;ﻩelsescs(i)=0;ﻩendﻩendﻩfor j=(len_scs+1):1:len_str1ﻩif temp_sz(j-len_scs)==0fori=1:1:(len_scs+1)ﻩif temp_sz(j-len_scs-1+i)==0ﻩﻩﻩ temp_sz(j-len_scs-1+i)=0;elseﻩﻩ temp_sz(j-len_scs-1+i)=1;ﻩﻩendﻩendﻩelseﻩ for i=1:1:(len_scs+1)ﻩifscs(i)==temp_sz(j-len_scs-1+i)ﻩﻩﻩﻩ temp_sz(j-len_scs-1+i)=0;ﻩelseﻩﻩtemp_sz(j-len_scs-1+i)=1;ﻩﻩendﻩendendfor i=(len_str1-len_scs+1):1:len_str1ﻩﻩsz(i)=temp_sz(i);endﻩfor i=1:1:(len_str1-len_scs)if sz(i)==1output_str(i)='1';elseoutput_str(i)='0';endendset(handles.output,'String',output_str);er=0;for i=(len_str1-len_scs+1):1:len_str1sz(i)=temp_sz(i);if temp_sz(i)==0er=er+0;elseer=er+1;endendif er>0set(handles.output,'String','NONE');errordlg('校验错误','校验错误');endEnd2.5 程序执行测试2.5.1 编码测试2.5.2 译码测试①输入报错②正常译码③译码报错内容3:思考问题3.1 CRC编码和海明编码的主要区别有哪些?3.1.1 CRC和海明的校验码的位置不同,CRC冗余码加在原码序列后面,从而形成编码序列,而海明是插在2的次方位3.1.2CRC的冗余码位数和生成式有关,一旦生成式定下来,那么冗余码位数就确定,而海明则是与输入编码序列的位数有关,输入编码序列位数越多,海明校验码的位数越多3.1.3 CRC和海明的校验原理完全不同,CRC是基于长除法的一种余子式校验,而海明则是基于奇偶校验,而且校验码把原来的信息码分片校验3.1.4 CRC没有纠错能力,但是易于电路实现,因为异或和以为实现简单,所以广泛用于实际校验,而海明虽然具有纠错能力,但是计算比较复杂,因为需要次方运算,而且只能纠一位错,所以实用性不如前者。