网络编程 广播与组播

广播发送端

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值