📄 rec.c
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>char *hostname = "192.168.0.1" ;char *multicase = "224.10.201.1" ;char *localip = "192.168.0.2" ;int port = 6789 ;int main(){ struct ip_mreq command ; int loop = 1 ; int iter = 0 ; int sin_len ; char message[256] = "" ; int socket_des ; struct sockaddr_in sin ; struct hostent *server_host_name ; if ( (server_host_name = gethostbyname(hostname)) == 0 ) { printf("gethostbyname error\n") ; exit(EXIT_FAILURE) ; } bzero(&sin,sizeof(sin)) ; sin.sin_family = AF_INET ; sin.sin_addr.s_addr = inet_addr(localip) ; sin.sin_port = htons(port) ; if ( (socket_des = socket(AF_INET,SOCK_DGRAM,0)) == -1 ) { printf("create socket error\n") ; exit(EXIT_FAILURE) ; } loop = 1 ; if ( setsockopt(socket_des,SOL_SOCKET,SO_REUSEADDR,&loop,sizeof(loop))<0) { printf("setsockopt:SO_REUSEADDR\n") ; exit(EXIT_FAILURE) ; } if ( bind(socket_des,(struct sockaddr*)&sin,sizeof(sin)) < 0 ) { printf("bind error\n") ; exit(EXIT_FAILURE) ; } loop = 1 ; if ( setsockopt(socket_des,IPPROTO_IP,IP_MULTICAST_LOOP,&loop,sizeof(loop))<0) { printf("setsockopt:IP_MULTICAST_LOOP\n") ; exit(EXIT_FAILURE) ; } command.imr_multiaddr.s_addr = inet_addr(multicase) ; command.imr_interface.s_addr = inet_addr(localip) ; if ( command.imr_multiaddr.s_addr == -1 ) { printf("%s not a legal multicast address\n",multicase) ; exit(EXIT_FAILURE) ; } if ( setsockopt(socket_des,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&command,sizeof(command)) < 0 ) { printf("setsocketopt:IP_ADD_MEMBERSHIP\n") ; exit(EXIT_FAILURE) ; } while(iter++ < 10) { sin_len = sizeof(sin) ; if ( recvfrom(socket_des,message,256,0,(struct sockaddr*)&sin,&sin_len) == -1 ) { printf("recv error\n") ; exit(EXIT_FAILURE) ; } printf("Response #%-2d from server:%s\n",iter,message) ; sleep(2) ; } if ( setsockopt(socket_des,IPPROTO_IP,IP_DROP_MEMBERSHIP,&command,sizeof(command)) < 0 ) { printf("setsockopt:IP_DROP_MEMBERSHIP\n") ; exit(EXIT_FAILURE) ; } close(socket_des) ; exit(EXIT_SUCCESS) ;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -