1 #include<iostream> 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<sys/types.h> 6 #include<unistd.h> 7 #include<sys/socket.h> 8 #include<netdb.h> 9 #include<arpa/inet.h> 10 #include<netinet/in.h> 11 #define MCAST_PORT 8888 12 #define MCAST_ADDR “224.0.0.88” /一个局部连接多播地址,路由器不进行转发/ 13 #define MCAST_INTERVAL 5 //发送时间间隔 14 #define BUFF_SIZE 256 //接收缓冲区大小 15 using namespace std; 16 int main() 17 { 18 int sock; 19 struct sockaddr_in local_addr; 20 int err=-1; 21 sock=socket(AF_INET,SOCK_DGRAM,0); 22 if(sock==-1) 23 { 24 cout<<“sock error”<<endl; 25 return -1; 26 } 27 /初始化地址/ 28 local_addr.sin_family=AF_INET; 29 local_addr.sin_addr.s_addr=htonl(INADDR_ANY); 30 local_addr.sin_port=htons(MCAST_PORT); 31 /绑定socket/ 32 err=bind(sock,(struct sockaddr)&local_addr,sizeof(local_addr)); 33 if(err<0) 34 { 35 cout<<“bind error”<<endl; 36 return -2; 37 } 38 /设置回环许可/ 39 int loop=1; 40 err=setsockopt(sock,IPPROTO_IP,IP_MULTICAST_LOOP,&loop,sizeof(loop)); 41 if(err<0) 42 { 43 cout<<“set sock error”<<endl; 44 return -3; 45 } 46 struct ip_mreq mreq;/加入广播组/ 47 mreq.imr_multiaddr.s_addr=inet_addr(MCAST_ADDR);//广播地址 48 mreq.imr_interface.s_addr=htonl(INADDR_ANY); //网络接口为默认 49 /将本机加入广播组/ 50 err=setsockopt(sock,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)); 51 if(err<0) 52 { 53 cout<<“set sock error”<<endl; 54 return -4; 55 } 56 int times=0; 57 socklen_t addr_len=0; 58 char buff[BUFF_SIZE]; 59 int n=0; 60 /循环接受广播组的消息,5次后退出/ 61 for(times=0;;times++) 62 { 63 addr_len=sizeof(local_addr); 64 memset(buff,0,BUFF_SIZE); 65 n=recvfrom(sock,buff,BUFF_SIZE,0,(struct sockaddr)&local_addr,&addr_len); 66 if(n==-1) 67 { 68 cout<<“recv error”<<endl; 69 return -5; 70 } 71 /打印信息/ 72 printf(“RECV %dst message from server : %s ”,times,buff); 73 sleep(MCAST_INTERVAL); 74 } 75 /退出广播组/ 76 err=setsockopt(sock,IPPROTO_IP,IP_DROP_MEMBERSHIP,&mreq,sizeof(mreq)); 77 close(sock); 78 return 0; 79 }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/146831.html