Welcome

首页 / 软件开发 / C++ / 用Visual C++实现局域网IP多播

用Visual C++实现局域网IP多播2011-04-19 天极 刘涛在局域网中,管理员常常需要将某条信息发送给一组用户。如果使用一对一的发送方法, 虽然是可行的,但是过于麻烦,也常会出现漏发、错发。为了更有效的解决这种组通信问题 ,出现了一种多播技术(也常称为组播通信),它是基于IP层的通信技术。为了帮助读者理 解,下面将简要的介绍一下多播的概念。

众所周知,普通IP通信是在一个发送者和一 个接收者之间进行的,我们常把它称为点对点的通信,但对于有些应用,这种点对点的通信 模式不能有效地满足实际应用的需求。例如:一个数字电话会议系统由多个会场组成,当在 其中一个会场的参会人发言时,要求其它会场都能即时的得到此发言的内容,这是一个典型 的一对多的通信应用,通常把这种一对多的通信称为多播通信。采用多播通信技术,不仅可 以实现一个发送者和多个接收者之间进行通信的功能,而且可以有效减轻网络通信的负担, 避免资源的无谓浪费。

广播也是一种实现一对多数据通信的模式,但广播与多播在实 现方式上有所不同。广播是将数据从一个工作站发出,局域网内的其他所有工作站都能收到 它。这一特征适用于无连接协议,因为LAN上的所有机器都可获得并处理广播消息。使用广播 消息的不利之处是每台机器都必须对该消息进行处理。多播通信则不同,数据从一个工作站 发出后,如果在其它LAN上的机器上面运行的进程表示对这些数据"有兴趣",多播 数据才会制给它们。

本实例由Sender和Receiver两个程序组成,Sender用户从控制台 上输入多播发送数据,Receiver端都要求加入同一个多播组,完成接收Sender发送的多播数 据。

一、实现方法

1、 协议支持

并不是所有的协议都支持多播通信, 对Win32平台而言,仅两种可从WinSock内访问的协议(IP/ATM)才提供了对多播通信的支持 。因通常通信应用都建立在TCP/IP协议之上的,所以本文只针对IP协议来探讨多播通信技术 。

支持多播通信的平台包括Windows CE 2.1、Windows 95、Windows 98、Windows NT 4、Windows 2000和WindowsXP。自2.1版开始,Windows CE才开始实现对IP多播的支持。本文 实例建立在WindowsXP专业版平台上。

2、多播地址

IP采用D类地址来支持多播 。每个D类地址代表一组主机。共有28位可用来标识小组。所以可以同时有多达25亿个小组。 当一个进程向一个D类地址发送分组时,会尽最大的努力将它送给小组的所有成员,但不能保 证全部送到。有些成员可能收不到这个分组。举个例子来说,假定五个节点都想通过I P多播 ,实现彼此间的通信,它们便可加入同一个组地址。全部加入之后,由一个节点发出的任何 数据均会一模一样地复制一份,发给组内的每个成员,甚至包括始发数据的那个节点。D类I P地址范围在244.0.0.0到239.255.255.255之间。它分为两类:永久地址和临时地址。永久地 址是为特殊用途而保留的。比如,244.0.0.0根本没有使用(也不能使用),244.0.0.1代表 子网内的所有系统(主机),而244.0.0.2代表子网内的所有路由器。在RFC 1700文件中,提 供了所有保留地址的一个详细清单。该文件是为特殊用途保留的所有资源的一个列表,大家 可以找来作为参考。"Internet分配数字专家组"(I A N A)负责着这个列表的维 护。在表1中,我们总结了目前标定为"保留"的一些地址。临时组地址在使用前必 须先创建,一个进程可以要求其主机加入特定的组,它也能要求其主机脱离该组。当主机上 的最后一个进程脱离某个组后,该组地址就不再在这台主机中出现。每个主机都要记录它的 进程当前属于哪个组。 表1 部分永久地址说明

地 址 说 明

244.0.0.1 基本 地址(保留)

244.0.0.1 子网上的所有系统

244.0.0.2 子网上的所有路由器

244.0.0.5 子网上所有OSPF路由器

244.0.0.6 子网上所有指定的OSPF路由器

244.0.0.9 RIP第2版本组地址

244.0.1.1 网络时间协议

244.0.1.24 WINS服务器组地址