server:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<arpa/inet.h>
int main(){
//1.创建一个通信的socket
int fd = socket(PF_INET,SOCK_DGRAM,0);
if(fd == -1){
perror("socket");
exit(-1);
}
//2.设置多播的属性,设置外出接口
struct in_addr imr_multiaddr;
//初始化多播地址
inet_pton(AF_INET,"239.0.0.10",&imr_multiaddr.s_addr);
setsockopt(fd,IPPROTO_IP,IP_MULTICAST_IF,&imr_multiaddr,sizeof(imr_multiaddr));
//3.初始化客户端的地址信息
struct sockaddr_in cliaddr;
cliaddr.sin_family = AF_INET;
cliaddr.sin_port = htons(9999);
inet_pton(AF_INET,"239.0.0.10",&cliaddr.sin_addr.s_addr);
//4.通信
int num=0;
while(1){
char sendBuf[128];
sprintf(sendBuf,"hello,client....%d\n",num++);
//发送数据
sendto(fd,sendBuf,strlen(sendBuf)+1,0,(struct sockaddr*)&cliaddr,sizeof(cliaddr));
printf("组播的数据: %s\n",sendBuf);
sleep(1);
}
close(fd);
return 0;
}
client:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<arpa/inet.h>
int main(){
//1.创建一个通信的socket
int fd = socket(PF_INET,SOCK_DGRAM,0);
if(fd==-1){
perror("socket");
exit(-1);
}
//2.客户端绑定本地的IP和端口
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(9999);
addr.sin_addr.s_addr = INADDR_ANY;
int ret = bind(fd,(struct sockaddr*)&addr,sizeof(addr));
if(ret==-1){
perror("bind");
exit(-1);
}
struct ip_mreq op;
inet_pton(AF_INET,"239.0.0.10",&op.imr_multiaddr.s_addr);
op.imr_interface.s_addr = INADDR_ANY;
//加入到多播组
setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&op,sizeof(op));
//3.通信
while(1){
char buf[128];
//接受数据
int num=recvfrom(fd,buf,sizeof(buf),0,NULL,NULL);
printf("server say : %s\n",buf);
}
close(fd);
return 0;
}