版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 线上营销落地合同模板
- 物品赠与协议合同模板
- 美国篮球俱乐部合同模板
- 输送带合同模板
- 学校广告安装合同模板
- 罐罐茶合同模板
- 虚拟房产租赁合同模板
- 来件装配合同模板
- 租车担保合同模板
- 磁性电机采购合同模板
- 融媒体直播运营
- 农业科技成果转化与推广
- 中国传统戏曲服饰元素在当代服装设计上的运用
- 2024年中国银行股份有限公司招聘笔试参考题库含答案解析
- 浙教版六年级劳动项目三-任务二《创意班规巧设计》课件
- 【单元专项】人教PEP版五年级上册英语-Unit 2 My week 阅读(含答案)
- 胶东国际机场
- 中国成人患者肠外肠内营养临床应用指南(2023版)
- 水工建筑物课程设计任务和指导书
- 蛋白的分离纯化
- 英汉互译单词练习打印纸
评论
0/150
提交评论