UDP组播
通常,在传统的网络通讯中,有两种方式,一种是源主机和目标主机两台主机之间进行的“一对一”的通讯方式,即单播,第二种是一台源主机与网络中所有其他主机之间进行的通讯,即广播。那么,如果需要将信息从源主机发送到网络中的多个目标主机,要么采用广播方式,这样网络中所有主机都会收到信息,要么,采用单播方式,由源主机分别向各个不同目标主机发送信息。
可以看出来,在广播方式下,信息会发送到不需要该信息的主机从而浪费带宽资源,甚至引起广播风暴:而单播方式下,会因为数据包的多次重复而浪费带宽资源,同时,源主机的负荷会因为多次的数据复制而加大,所以,单播与广播对于多点发送问题有缺陷。
在此情况下,组播技术就应用而生了。
组播又称多目标广播、多播。网络中使用的一种传输方式,它允许把 所发消息传送给所有可能目的地中的一个经过选择的子集,即向明确指出的多种地址输送信息。是一种在一个发送者和多个接收者之间进行通信的方法。
组播地址分类
224.0.0.1-239.255.255.255为组播地址块,其中分为本地网络服务控制块、全局有效组播地址、局部私有组播地址:
224.0.0.0-224.0.0.255为本地网络服务控制块
224.0.1.0-238.255.255.255为全局有效组播地址
239.0.0.0-239.255.255.255为局部私有组播地址
代码实现如下
服务器端
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<string.h>
#include<net/if.h>
#include<arpa/inet.h>
#define SERV_PORT 6666
#define CLIENT_PORT 8888
#define MAXLINE 1500
#define GROUP "239.0.0.2"
int main(void)
{
int sockfd;
struct sockaddr_in serv_addr,clie_addr;
char buf[MAXLINE]="itcast\n";
struct ip_mreqn group;
sockfd = socket(AF_INET,SOCK_DGRAM,0); //用于UDP通信的套接字
bzero