实验名称 数据链路层-检错与 纠错 课程名称 计算机网络

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上 海 理 工 大 学
计 算 机 工 程 学 院
实 验 报 告
实验名称 课程名称 数据链路层-检错与 纠错 计算机网络
学号 992A328B 地点 计算机信息中心 教师 陈家琪
姓名 朱文贵 日期 2002.11.5 成绩
备注:
第1页 共5页

上海理工大学计算机工程学院
实验报告
第2页 共5页
1.实验目的
⑴ 通过《海明编码》演示软件,验证纠错与检错功能和性能,掌握其工作原理; ⑵ 编写海明编码程序和 CRC 编码程序;
2.实验环境(软件、硬件及条件)
⑴ Windws9x/NT/2000/XP ⑵ TCP/IP 协议 (编程工具:Visual C++ 6.0,C++ Builder 或 其它)
3.实验方法
运行《CRC 编码》演示软件 ⑴ 验证纠错能力; ⑵ 验证检错能力; ⑶ 若数据=10011001,海明编码=?,校验位=? ⑷ 若接收端收到的信息=101010101001(海明编码) ,数据=? ⑸ 尝试编写海明编码的程序。
4.实验分析
参考
5.实验结论
通过实验表明海明码是一种可纠正一位错的编码方法。 用 r 个校验位构造出 r 个校验关系式来指示一位错码的 n(=m+r)种 可能位置及表示无差错。 码字排列:从最左边位开始依次编号(1,2,….,n) ; k r 个校验位:在 2 的位置(1,2,4,8…..) ; m 个数据位:在其余位(3,5,6,7…..) 。 r 的确定:r2-r>=m+1; 如果海明距 d>=2t+1,则该编码可纠正任何 t 个(或 t 个以下)的错 误。 如果 d>=e+1,则该编码可检测出任何 e 个(或 e 个以下)的错误。
-2-

上海理工大学计算机工程学院
实验报告
第3页 共5页
附:源代码
unit hamming; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; GroupBox1: TGroupBox; Label3: TLabel; Label4: TLabel; Label5: TLabel; Edit1: TEdit; Label6: TLabel; Label7: TLabel; Edit2: TEdit; Button1: TButton; GroupBox2: TGroupBox; Label9: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Edit3: TEdit; Edit4: TEdit; GroupBox3: TGroupBox; Label10: TLabel; Label14: TLabel; Label15: TLabel; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Edit5: TEdit; Edit6: TEdit; Label8: TLabel; Label20: TLabel; procedure Edit1Change(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation
-3-

上海理工大学计算机工程学院
实验报告
第4页 共5页
{$R *.DFM} procedure TForm1.Edit1Change(Sender: TObject); begin edit2.text:=''; edit3.text:=''; edit4.text:=''; end; procedure TForm1.Button1Click(Sender: TObject); var e1,e2,e3,s,p1,p2,p3,p4,d1,d2,d3,d4,d5,d6,d7,d8,s1,s2,s3,s4:integer ; var d:int64; var b:array[0..11] of integer; begin randomize; d1:=strtoint(edit1.text)mod 10; d2:=(strtoint(edit1.text)div 10)mod 10; d3:=(strtoint(edit1.text)div 100)mod 10; d4:=(strtoint(edit1.text)div 1000)mod 10; d5:=(strtoint(edit1.text)div 10000)mod 10; d6:=(strtoint(edit1.text)div 100000)mod 10; d7:=(strtoint(edit1.text)div 1000000)mod 10; d8:=(strtoint(edit1.text)div 10000000)mod 10; p1:=d1 xor d2 xor d4 xor d5 xor d7; p2:=d1 xor d3 xor d4 xor d6 xor d7; p3:=d2 xor d3 xor d4 xor d8; p4:=d5 xor d6 xor d7 xor d8; b[0]:=p1; b[1]:=p2; b[2]:=d1; b[3]:=p3; b[4]:=d2; b[5]:=d3; b[6]:=d4; b[7]:=p4; b[8]:=d5; b[9]:=d6; b[10]:=d7; b[11]:=d8; edit2.text:=inttostr(b[0])+inttostr(b[1])+inttostr(b[2])+inttostr(b[3]) +inttostr(b[4])+inttostr(b[5])+inttostr(b[6])+inttostr(b[7]) +inttostr(b[8])+inttostr(b[9])+inttostr(b[10])+inttostr(b[11]); edit6.text:=edit2.text; if radiobutton1.Checked=true then begin label15.color:=clAqua; label10.caption:=''; label14.caption:=''; e2:=random(11); e1:=random(11); while e1=e2 do e2:=random(11)+1; e3:=random(11); repeat e3:=random(11)+1; until not(e3=e1) or not (e3=e2); if b[e1]=1 then b[e1]:=0 else b[e1]:=1; if b[e2]=1 then b[e2]:=0 else b[e2]:=1; if b[e3]=1 then b[e3]:=0 else b[e3]:=1;
-4-

相关文档
最新文档