c语⾔socket实现udp组播收包,UDP组播程序编程.doc
UDP组播程序编程
实验三 UDP组播程序编程
⼀、实验⽬的
掌握P协议的⼯作原理掌握SOCKET编程的基本⽅法应⽤C语⾔与WinSock2进⾏简单的连接的⽹络程序设计,实现⽹络数据传输由Sender 和Receiver两个程序组成,Sender⽤户从控制台上输⼊多播发送数据,Receiver端都要求加⼊同⼀个多播组,完成接收Sender发送的多播数据。
多播路由器
多播由特殊的多播路由器来实现,多播路由器同时也可以是普通路由器。各个多播路由器每分钟发送⼀个硬件多播信息给⼦⽹上的主机(⽬的地址为24.0.0.1),要求它们报告其进程当前所属的是哪⼀组,各主机将它感兴趣的D类地址返回。这些询问和响应分组使⽤
IGMP(Internet group management protocol),它⼤致类似于ICMP。它只有两种分组:询问和响应,都有⼀个简单的固定格式,其中有效载荷字段的第⼀个字段是⼀些控制信息,第⼆字段是⼀个D类地址,在RFC1112中有详细说明。
多播路由器的选择是通过⽣成树实现的,每个多播路由器采⽤修改过的距离⽮量协议和其邻居交换信息,以便向每个路由器为每⼀组构造⼀个覆盖所有组员的⽣成树。在修剪⽣成树及删除⽆关路由器和⽹络时,⽤到了很多优化⽅法。
库⽀持
WinSock提供了实现多播通信的API函数调⽤。针对IP多播,WinSock提供了两种不同的实现⽅法,具体取决于使⽤的是哪个版本的WinSock。第⼀种⽅法是WinSock1提供的,要求通过套接字选项来加⼊⼀个组;另⼀种⽅法是WinSock2提供的,它是引⼊⼀个新函数,专门负责多播组的加⼊,这个函数便是WSAJoinLeaf,它是基层协议是⽆关的。本⽂将通过⼀个多播通信的实例的实现过程,来讲叙多播实现的主要步骤。因为Window98以后版本都安装了Winsock2.0以上版本,所以本⽂实例在WinSock2.0平台上开发的,但在其中对WinSock1实现不同的地⽅加以说明。
在局域⽹中,管理员常常需要将某条信息发送给⼀组⽤户。如果使⽤⼀对⼀的发送⽅法,虽然是可⾏的,但是过于⿇烦,也常会出现漏发、错发。为了更有效的解决这种组通信问题,出现了⼀种多播技术(也常称为组播通信),它是基于IP层的通信技术。采⽤多播通信技术,不仅可以实现⼀个发送者和多个接收者之间进⾏通信的功能,⽽且可以有效减轻⽹络通信的负担,避免资源的⽆谓浪费。⼴播也是⼀种实现⼀对多数据通信的模式,但⼴播与多播在实现⽅式上有所不同。⼴播是将数据从⼀个⼯作站
发出,局域⽹内的其他所有⼯作站都能收到它。这⼀特征适⽤于⽆连接协议,因为LAN上的所有机器都可获得并处理⼴播消息。使⽤⼴播消息的不利之处是每台机器都必须对该消息进⾏处理。多播通信则不同,数据从⼀个⼯作站发出后,如果在其它LAN上的机器上⾯运⾏的进程表⽰对这些数据有兴趣,多播数据才会制给它们。1.实验名称
socket编程聊天室基本流程
2.实验⽬的
3.实验内容
4.测试数据和预期结果(必要时应准备多组数据)
5.算法分析和流程图
6.源程序(应加适当的注释,可读性好)
⼩结(出错及解决⽅法,上机调试的结果和体会)