UDP 组播/多播实现步骤
UDP组播
实现服务器对客户端分组播放(发送数据)。
实现步骤:
server.c
1、创建服务器套接字
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain, int type, int protocol); 返回套接字
2、构建服务器地址结构
struct sockaddr_in serveraddr;
#include <strings.h>
bzero(&serveraddr, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //IP
serveraddr.sin_port = htons(SERVER_PORT);//端口
3、绑定地址
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
4、构建组播属性结构
struct ip_mreqn group;
#include <arpa/inet.h>
inet_pton(AF_INET,GROUP,&group.imr_multiaddr);//设置组播地址
net_pton(AF_INET,"0.0.0.0",&group.imr_address);//设置本地地址
group.imr_ifindex=if_nametoindex("ent0");//设置网卡接口
5、设置组播权限和属性
setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_IF,&group,
sizeof(group));//设置组播权限及选项
6、设置客户端组播地址
struct sockaddr_in cliaddr;
bzero(&cliaddr,sizeof(cliaddr));
cliaddr.sin_family=AF_INET;
inet_pton(AF_INET,GROUP,&cliaddr.sin_addr.s_addr);
cliaddr.sin_port=htons(CLIENT_PORT);
7、发送数据
sendto(sockfd,buf,strlen(buf),0,(structsockaddr*)&cliaddr,
sizeof(cliaddr));//往组播地址发送信息,返回数据大小
client.c
1、创建客户端套接字
2、构建客户端地址结构
3、绑定地址
4、构建组播结构
5、设置组播权限和属性
6、接收数据
#include <sys/types.h>
#include <sys/socket.h>
len=recvfrom(confd,buf,sizeof(buf),0,NULL,0);//接收数据