广播发送端
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
//广播发送端
//类似udp客户端
void send_broadcast(){
char buf[20]="123";
//创建套接字
int sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd<0){
perror("socket");
return;
}
//非必绑定
//设置网络属性 (允许广播)
int broad =1;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&broad,sizeof(broad));
//填写通用地址信息结构体
struct sockaddr_in dest;
dest.sin_family=AF_INET;
dest.sin_port=htons(8888);
dest.sin_addr.s_addr=inet_addr("192.168.8.255");
//发送
while(1){
sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&dest,sizeof(dest));
sleep(1);
}
}
int main(){
send_broadcast();
return 0;
}
广播接收端
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
//广播接收端
//类似于udp服务器
void recv_broadcast(){
//创建套接字
int sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd<0){
perror("socket");
return ;
}
//绑定
struct sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(8888);
addr.sin_addr.s_addr=inet_addr("192.168.8.255");
bind(sockfd,(struct sockaddr*)&addr,sizeof(addr));
char buf[128]="";
while(1){
recvfrom(sockfd,buf,sizeof(buf),0,NULL,NULL);
printf("buf=%s\n",buf);
}
}
int main(){
recv_broadcast();
return 0;
}
组播发送端
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
//组播发送端
//类似于于udp客户端
void send_zoom_broadcast(){
//创建套接字
int sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd<0){
perror("socket");
return;
}
//非绑定
//填写通用地址信息结构体
struct sockaddr_in dest;
dest.sin_family=AF_INET;
dest.sin_port=htons(8888);
dest.sin_addr.s_addr=inet_addr("224.1.2.3");
//组播地址:224.0.0.0-----239.255.255.255
//发送
char buf[20]="cudayy";
while(1){
sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&dest,sizeof(dest));
sleep(1);
}
}
int main(){
send_zoom_broadcast();
return 0;
}
组播接收端
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <arpa/inet.h>
//组播接收端
//类似于udp服务器
void recv_zoom_broadcast(){
//创建套接字
int sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd<0){
perror("socket");
return;
}
//加入多播组
struct ip_mreqn mp;
mp.imr_multiaddr.s_addr=inet_addr("224.1.2.3");// 组播网络字节序
mp.imr_address.s_addr=inet_addr("192.168.8.207");// 本机网络字节序
mp.imr_ifindex=2;
setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mp,sizeof(mp));
//绑定
struct sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(8888);
addr.sin_addr.s_addr=inet_addr("224.1.2.3");
bind(sockfd,(struct sockaddr*)&addr,sizeof(addr));
//接收
char buf[20]="";
while(1){
recvfrom(sockfd,buf,sizeof(buf),0,NULL,NULL);
printf("buf=%s\n",buf);
}
}
int main(){
recv_zoom_broadcast();
return 0;
}