UDP組播服務器
實現服務器對客戶端分組播放(發送數據)。dom
實現步驟:socket
server.cspa
1、建立服務器套接字server
#include <sys/types.h> 接口
#include <sys/socket.h>ip
int socket(int domain, int type, int protocol); 返回套接字string
2、構建服務器地址結構cli
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);//接收數據