用Delphi进行WinSock编程,怎样实现多播?(200分)

  • 主题发起人 主题发起人 focus
  • 开始时间 开始时间
F

focus

Unregistered / Unconfirmed
GUEST, unregistred user!
用Delphi进行WinSock编程,怎样实现多播。如有一例,小弟感激不尽。
e-mail:sworderking@sina.com
 
什么叫“多播”?是广播吧?
 
把网络子地址设为全1,即是广播。
 
1~126.255.255.255 (A类网广播地址)
128~191.XXX.255.255 (B类网广播地址)
192~254.XXX.XXX.255 (C类网广播地址)
 
LocalIP为本地IP
广播IP地址为:

procedure SetBroadCastIp;
var
i,j,iHead:Integer;
sHead,s:String;
ai:array [1..3] of integer;
begin
j:=1;
for i:=0 to Length(LocalIP) do
begin
if LocalIP='.' then
begin
ai[j]:=i;
Inc(j);
end;
if j>3 then break;
end;
sHead:=Copy(LocalIp,1,ai[1]-1);
iHead:=StrToInt(sHead);
if iHead<128 then //A类网
begin
BroadCastIP:=sHead+'.255.255.255';
end
else
begin
if iHead<192 then //B类网
begin
s:=Copy(LocalIP,1,ai[2]-1);
BroadCastIP:=s+'.255.255';
end
else //C类网
begin
s:=Copy(LocalIP,1,ai[3]-1);
BroadCastIP:=s+'.255';
end;
end;
end;
 
本网段内的255.255.255.255
 
本人已经搞定,谢谢各位。
多播与广播不同,多播是在广播基础上发展起来的。
 
呵呵,你搞定了也说给大家听听嘛,让我们也长长见识。:)
 
用winsocket API
 
多播也称为多点传送
是让数据从一个成员送出,然后复制给其他多个成员的技术

 
用winsock有创建多播的函数,还有加入、离开的函数,多播本来就与广播不同,广播
是所有的机器。
 
多博是multicast,广播是broadcast,亮个是不一样的。
 
多播好象是发到一个多播地址,再由路由器转的。
 
Windows Plat SDK中有专门的介绍。有的又把MultiCast称为组播
 
IP Multicast: IP多点广播(多播)
IP Multicast 是Internet 中针对一对多通信的协议标准,多数的客户/服务器系统都采用此协议。它是Internet 协议簇的延伸,是TCP/IP协议层中的网络层。它与传统的IP协议的不同之处就在于它更适用于支持客户/服务器系统的多媒体应用。

传统的TCP/IP网络中,发送者将数据包发向网络,网络中的其他站点都会检测到它的存在。但是只有当包的目的地址与站点的地址相符时,才能被接收。如果发送者想将包发给多个接收者(一对多会话),他只能有两个选择:
将数据包分别发给每个接收者。这种情形下,每次都需要特别指定接收者的地址。如果一个发送者发出一个1Mbps的数据流,将给每个接收者带来1Mbps的数据量。不难想象,一个多媒体节目广播给几百个接收者时,网络将很快达到饱和。
指定一群广播地址,将数据发向它们,不管收端是否愿意接收。不仅网络中的每个站点会收到数据,与网络相连的其他外部网同样也会收到(除非与外部网相连的网关、网桥、路由器设置了滤除广播数据流的功能)。这还是一个数据流,但是却被额外发向了一些无接收要求的目的地。
以上两种方式都将浪费大量的网络资源。

IP多播使多媒体应用软件的发端仅须发送一次数据。数据流被所有想接收数据的用户接收,却并不必为每个收端单独发送。应用软件仅须将D类IP地址放在数据包的目的地址区内。想接收数据的用户会接受此类具有D类IP地址的数据包,其它用户仅须忽略。这样,数据流就不会造成不必要的网络拥塞了。

D类IP地址的范围是224.0.0.0至239.255.255.255.此范围内的子集239.0.0.0至239.255.255.255被单独划出用做本地网使用,叫做管理范围的IP多播地址(administratively scoped IP Multicast address)。

具有IP多播功能的网间路由器允许音频/视频数据在本地网以外传输,包括Internet。通过限制多播会话的有效地址范围,能够确保数据在恰当的本地网或广域网上传,而不是整个全球网。路由器的路径剪切功能(pruning capability)会进一步减少不必要的数据量产生。

如果网络路由器应用了剪切(pruning)算法,IP多播数据流的传输将会更高效。Pruning是减少非必要数据包传播的一种方法。例如网络A到网络E之间存在着多路径,通向无定订阅意向的用户的网络路径被剪切。定阅多播会话(session)的用户采用IGMP协议, IGMP将有关订阅者的信息传送给接收网络的路由器。               

有几种限制多播数据包行程范围的方法。包括对会话中的每个包分配TTL值(Time-to-Live);在mrouted主机或具IP多播功能的路由器上设置TTL门限值;利用D类IP地址子集的有关特性。

TTL值决定了一个包能够“跳跃”(hop)多少次(即数据包被路由器最终拒传之前,能够转换多少个路由器)。如果你所使用的多播会话分配应用软件允许设定会话(session)的TTL值,你应为你的网络拓扑结构设置合适的TTL.

例如,对于MBONE会话,你可以将TTL值设在四个预先指定行程中的任意一个之内,或者设定一个具体值。它们是:Local(1 hop),Site(15hops),Region(63 hops)和Worldwide(127 hops).这些值是针对MBONE网的。对于不同的网络环境,将使用不同的值。但须注意的是,在包含Internet接点的复杂拓扑结构的网络中,将TTL值设为相对较小值并不能保正多播数据包不被传送到Internet上。TTL参数应和TTL门限, 限定的IP多播地址范围相结合使用。

TTL门限是一个路由器性能,对mrouted和IP路由器都适用。当TTL门限值被设定之后,只有当数据包的TTL值大于门限值时才能被传送。因此,通过将门限设为比本网最大hop数还大的值,或将包的TTL值设为小于或大于最大hop数,你就可阻止数据包流出本网。

管理范围内(administratively Scoped)的IP多播地址是D类IP地址的子集,即将239.0.0.0至239.255.255.255。这些地址被看做是本地地址。要使用此类地址来限制多播会话的行程,你应做如下几点:
将会话的多播地址设在上述地址范围之内。
设置构成边界的路由器,使路由器不将数据包传出边界。

以上步骤预先假定了你所用的软件允许你对会话设定多播地址(如Cisco公司的IP/TV软件),且你的路由器具有设置地址边界的功能。 

IP多播综合了几种不同的路径协议,如:
Protoclo Independent Multicasting (PIM), supported by Cisco Systems and Bay Networks
Distance Vector Multicast Routing Protoclo(DVMRP),supported by Cisco Systems ,Bay Networks and 3Com
Multicast Open Shortest Path First(MOSPF) ,supported by Proteon and 3Com
 
DELPHI中只能用WINSOCK API写了。
 
接受答案了.
 
后退
顶部