思维导图
![](https://img-blog.csdnimg.cn/direct/09150b0dbc3c4cdcb2e8a5b56c9257a1.png)
广播发送端
#include <header.h>
int main(int argc, const char *argv[])
{
int sfd=socket(AF_INET,SOCK_DGRAM,0);
if(sfd==-1)
{
perror("socket");
return 1;
}
int broadcast=-1;
if(setsockopt(sfd,SOL_SOCKET,SO_BROADCAST,&broadcast,sizeof(broadcast))==-1)
{
perror("setsockopt");
return 1;
}
struct sockaddr_in rin;
rin.sin_family=AF_INET;
rin.sin_port=htons(6666);
rin.sin_addr.s_addr=inet_addr("192.168.125.255");
char wbuf[128]={0};
while(1)
{
fgets(wbuf,sizeof(wbuf),stdin);
wbuf[strlen(wbuf)-1]=0;
sendto(sfd,wbuf,strlen(wbuf),0,(struct sockaddr*)&rin,sizeof(rin));
printf("send success\n");
if(strcmp(wbuf,"over")==0)
{
break;
}
}
close(sfd);
return 0;
}
广播接收端
#include <header.h>
int main(int argc, const char *argv[])
{
int rfd=socket(AF_INET,SOCK_DGRAM,0);
if(rfd==-1)
{
perror("socket");
return 1;
}
struct sockaddr_in rin;
rin.sin_family=AF_INET;
rin.sin_port=htons(6666);
rin.sin_addr.s_addr=inet_addr("192.168.125.255");
if(bind(rfd,(struct sockaddr*)&rin,sizeof(rin))==-1)
{
perror("bind");
return 1;
}
char rbuf[128]={0};
while(1)
{
bzero(rbuf,sizeof(rbuf));
recv(rfd,rbuf,sizeof(rbuf),0);
printf("broadcast message is:%s\n",rbuf);
}
close(rfd);
return 0;
}
组播发送端
#include <header.h>
int main(int argc, const char *argv[])
{
int sfd=socket(AF_INET,SOCK_DGRAM,0);
if(sfd==-1)
{
perror("socket");
return 1;
}
struct sockaddr_in rin;
rin.sin_family=AF_INET;
rin.sin_port=htons(5555);
rin.sin_addr.s_addr=inet_addr("224.1.2.4");
char wbuf[128]={0};
while(1)
{
fgets(wbuf,sizeof(wbuf),stdin);
wbuf[strlen(wbuf)-1]=0;
sendto(sfd,wbuf,strlen(wbuf),0,(struct sockaddr*)&rin,sizeof(rin));
printf("send success\n");
if(strcmp(wbuf,"over")==0)
{
break;
}
}
close(sfd);
return 0;
}
组播接收端
#include <header.h>
int main(int argc, const char *argv[])
{
int rfd=socket(AF_INET,SOCK_DGRAM,0);
if(rfd==-1)
{
perror("socket");
return 1;
}
struct ip_mreqn imr;
imr.imr_multiaddr.s_addr=inet_addr("224.1.2.4");
imr.imr_address.s_addr=inet_addr("192.168.125.105");
imr.imr_ifindex=2;
if(setsockopt(rfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&imr,sizeof(imr))==-1)
{
perror("setsocket");
return 1;
}
struct sockaddr_in rin;
rin.sin_addr.s_addr=inet_addr("224.1.2.4");
rin.sin_port=htons(5555);
rin.sin_family=AF_INET;
if(bind(rfd,(struct sockaddr*)&rin,sizeof(rin))==-1)
{
perror("bind");
return 1;
}
char rbuf[128]={0};
while(1)
{
bzero(rbuf,sizeof(rbuf));
recv(rfd,rbuf,sizeof(rbuf),0);
printf("the multicast message is:%s\n",rbuf);
if(strcmp(rbuf,"over")==0)
{
break;
}
}
close(rfd);
return 0;
}