网络课程设计报告4080117_第1页
网络课程设计报告4080117_第2页
网络课程设计报告4080117_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告利用 DELPHI 实现 IGMP 协议系别电子信息系专业名称计算机科学与技术班级学号4080117学生姓名徐本领指导教师曲荣欣成绩2011 年 7 月 13 日1 设计题目利用 DELPHI实现 IGMP协议2 目的要求( 1) 了解 IGMP协议的基本原理和功能( 2) 熟悉 DELPHI软件编程操作( 3) 通过用 DELPHI编程实现 Internet 组管理协议的基本功能3 设计分析3.1IGMP协议Internet 组管理协议( IGMP)是因特网协议家族中的一个组播协议,用于 IP 主机 向任一个直接相邻的路由器报告他们的组成员情况。 IGMP信息封装在 IP 报文中

2、,其 IP 的协议号为 2。它用来在 IP 主机和与其直接相邻的组播路由器之间建立、 维护组播组成 员关系。IGMP不包括组播路由器之间的组成员关系信息的传播与维护, 这部分工作由各 组播路由协议完成。所有参与组播的主机必须实现 IGMP。参与 IP 组播的主机可以在任意位置、任意时间、成员总数不受限制地加入或退出 组播组。组播路由器不需要也不可能保存所有主机的成员关系,它只是通过IGMP 协议了解每个接口连接的网段上是否存在某个组播组的接收者,即组成员。而主机方只需要 保存自己加入了哪些组播组。IGMP在主机与路由器之间是不对称的: 主机需要响应组播路由器的 IGMP查询报文, 即以 IGM

3、P MEMBERSHIP REPO报R文T 响应;路由器周期性发送成员资格查询报文,然后 根据收到的响应报文确定某个特定组在自己所在子网上是否有主机加入, 并且当收到主 机的退出组的报告时,发出特定组的查询报文( IGMP版本 2),以确定某个特定组是否 已无成员存在。3.2IGMP 如何封装在 IP 数据报中正如 ICMP一样,IGMP也被当作 IP 层的一部分。IGMP报文通过 IP 数据报进行传输。 不像我们已经见到的其他协议, IGMP有固定的报文长度, 没有可选数据。 图 3-2 显示了 IGMP报文如何封装在 IP 数据报中。IP 首部IP数据报IGMP 报文4 位 IGMP 版本

4、( 1 )4位 IGMP 类型( 1-2)未用检验和32 位组地址( D 类 IP 地址)0 3 47 815 16318 字 节8 字节20 字节3.3IGMP报文的字段格式图 3-3 显示了长度为 8 字节的 IGMP的报文格式这是版本为 1的IGMP 。IGMP 类型为 1说明是由多播路由器发出的查询报文,为 2说 明是主机发出的报告报文。 检验和的计算和 ICMP 协议相同。 组地址为 D 类 IP 地址。在查 询报文中组地址设置为 0,在报告报文中组地址为要参加的组地址。3.4 加入一个多播组 多播的基础就是一个进程的概念(使用的术语进程是指操作系统执行的一个程序), 该进程在一个主

5、机的给定接口上加入了一个多播组。在一个给定接口上的多播组中的成员 是动态的 它随时因进程加入和离开多播组而变化。这里所指的进程必须以某种方式在给定的接口上加入某个多播组。进程也能离开先前 加入的多播组。这些是一个支持多播主机中任何 API 所必需的部分。使用限定词 “接口 ”是 因为多播组中的成员是与接口相关联的。一个进程可以在多个接口上加入同一多播组。 3.5IGMP报告和查询多播路由器使用 IGMP报文来记录与该路由器相连网络中组成员的变化情况。使用 规则如下:( 1) 当第一个进程加入一个组时,主机就发送一个 IGMP报告。如果一个主机的多 个进程加入同一组,只发送一个 IGMP报告。这

6、个报告被发送到进程加入组所在的同一 接口上。(2) 进程离开一个组时, 主机不发送 IGMP报告,即便是组中的最后一个进程离开。 主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告东北大学秦皇岛分校课程设计报告报文。( 3) 多播路由器定时发送 IGMP查询来了解是否还有任何主机包含有属于多播组的 进程。多播路由器必须向每个接口发送一个 IGMP查询。因为路由器希望主机对它加入 的每个多播组均发回一个报告,因此 IGMP查询报文中的组地址被设置为 0。( 4) 主机通过发送 IGMP报告来响应一个 IGMP查询,对每个至少还包含一个进程 的组均要发回 IGMP报告。

7、4 详细设计4.1 主机端设计界面4.2 服务器端设计界面4.3 主机加入服务器广播组4.4 从服务器端查询主机4.5 服务器向主机发送广播消息4.6 主机收到服务器的广播消息4.7 单个主机离开组播4.8 主机离开后服务器再次广播5 程序源代码5.1 服务器端代码东北大学秦皇岛分校课程设计报告unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs , Buttons, StdCtrls, ExtCtrls, ColorGrd, Socke

8、ts, IdUDPServer,IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient,IdSocketHandle;typeTms = class(TForm)BitBtn1: TBitBtn;BitBtn2: TBitBtn;IdUDPClient1: TIdUDPClient;IdUDPServer1: TIdUDPServer;Edit1: TEdit;ListBox1: TListBox;procedure FormShow(Sender: TObject);procedure BitBtn1Click(Sender: TObject

9、);procedure BitBtn2Click(Sender: TObject);procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;ABinding: TIdSocketHandle);privateComputerName: array0.127 of Char; Private declarations public Public declarations end;varms: Tms;port: integer;implementation$R *.dfmprocedure Tms.FormShow(Sender

10、: TObject);varsz: dword;东北大学秦皇岛分校课程设计报告begin/ 获得字符串的大小port:= 101;sz := SizeOf(Computername);/ 得到本机的标识GetComputerName(ComputerName,sz);Try/ 设定等待时间为 50msIdUDPClient1.ReceiveTimeout:=50000;/ 设定远程目标主机的接收端口号为 "101" ,可以为其他值IdUDPClient1.Port:=101;/ 设定本地端口号为 "100"IdUDPServer1.DefaultPort

11、:=100;/ 打开 UDP服务器,开始监听端口IdUDPServer1.Active := true;excepton E: Exception dobeginE.Message := '出错: '#13#10+E.Message;raise;Application.Terminate;end;end;end;procedure Tms.BitBtn1Click(Sender: TObject);varcodestr: String;beginlistbox1.Items.Add(' 开始查询组内主机 ');codestr:= 'Q1'/ 否则

12、取得当前网友的主机名或者 IP 地址idudpclient1.Host:=computerName;/ 将数据发送给远程主机东北大学秦皇岛分校课程设计报告for port:= 101 to 110 doTryIdUDPClient1.Port:=port;idudpclient1.Send(codestr);excepton E: Exception dobeginE.Message := ' 出错: '#13#10+E.Message;raise;Application.Terminate;end;end;end;procedure Tms.BitBtn2Click(Send

13、er: TObject);varcodeStr: String;begincodeStr:= ' ' + edit1.Text;/ 否则取得当前网友的主机名或者 IP 地址idudpclient1.Host:=computerName;/ 将数据发送给远程主机for port:= 101 to 110 doTryIdUDPClient1.Port:=port;idudpclient1.Send(codestr);exceptend;end;procedure Tms.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;ABin

14、ding: TIdSocketHandle);var codeStr,cs: String;begin/ 设置字符串的长度东北大学秦皇岛分校课程设计报告SetLength(codestr, AData.Size);/ 把收到的数据写入字符串中AData.Read(codestr1, AData.Size);if codestr1 + codestr2 = 'RQ' thencs:='IP 地址为 224.0.0.' + codestr4 + codestr5 + codestr6 +' if codestr1 + codestr2 = 'IN&#

15、39; thencs:='IP 地址为 224.0.0.' + codestr3 + codestr4 + codestr5 +' if codestr1 + codestr2 = 'OU' thencs:='IP 地址为 224.0.0.' + codestr3 + codestr4 + codestr5 +' listbox1.Items.Add(cs);end;end.5.2 主机端代码unit Unit1;的主机在本组 '的主机已加入本组的主机已离开本组interface usesWindows, Messages

16、, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdUDPClient, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer ,IdSocketHandle, Buttons;typeTmc = class(TForm)Label1: TLabel;Edit2: TEdit;IdUDPServer1: TIdUDPServer;Label3: TLabel;BitBtn2: TBitBtn;BitBtn3: TBitBtn;IdUDPC

17、lient2: TIdUDPClient; procedure FormShow(Sender: TObject);procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;ABinding: TIdSocketHandle); procedure BitBtn2Click(Sender: TObject);procedure BitBtn3Click(Sender: TObject);东北大学秦皇岛分校课程设计报告privateComputerName: array0.127 of Char; Private declarat

18、ions public Public declarations end;typechuan = classa,st,n1,n2,cs: word;end;varmc: Tmc;implementation$R *.dfmprocedure Tmc.FormShow(Sender: TObject);var sz: dword;dport: integer;begindport:= 103;Trysz:= sizeof(Computername);GetComputerName(ComputerName,sz);/ 设定等待时间为 50msIdUDPClient2.ReceiveTimeout:

19、=50000;/ 设定远程目标主机的接收端口号为 "100" ,可以为其他值IdUDPClient2.Port:=100;/ 设定本地端口号为 dport 的值IdUDPServer1.DefaultPort:=dport;/ 打开 UDP服务器,开始监听端口label3.Caption:= inttostr(IdUDPServer1.DefaultPort);excepton E: Exception dobegin东北大学秦皇岛分校课程设计报告E.Message := ' 出错: '#13#10+E.Message;raise;Application.T

20、erminate;end;end;end;procedure Tmc.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;ABinding: TIdSocketHandle);varcodestr,re: String;begin/ 设置字符串的长度SetLength(codestr, AData.Size);/ 把收到的数据写入字符串中AData.Read(codestr1, AData.Size);if codestr1 = 'Q' thenre:= 'RQ1'+inttostr(IdUDPServer1.

21、DefaultPort);idudpclient2.Host:=computerName;/ 将数据发送给远程主机 idudpclient2.Send(re);if codestr1 = ' ' thenedit2.Text:= codestr;end;procedure Tmc.BitBtn2Click(Sender: TObject);var codeStr: string;beginIdUDPServer1.Active := true;codeStr:= 'IN' + inttostr(idudpserver1.DefaultPort);/ 否则取得当前网友的主机名或者 IP 地址 idudpclient2.Host:=computerName;/ 将数据发送给远程主机idudpclient2.Send(codeStr);end;东北大学秦皇岛分校课程设计报告procedure Tmc.BitBtn3Click(Sender: TObject);var codeStr: string;begincodeStr:= 'OU' + inttostr(idudpserver1.DefaultPort);/ 否则取得当前网

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论