sender.c - el envío de mensajes
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #define PORT 9999 #define GROUP "225.0.0.37" int main(int argc, char *argv[]) { struct sockaddr_in addr; int fd; char *message="ieps!"; if((fd=socket(AF_INET,SOCK_DGRAM,0)) < 0) { perror("socket()"); exit(EXIT_FAILURE); } memset(&addr,0,sizeof(addr)); addr.sin_family=AF_INET; addr.sin_addr.s_addr=inet_addr(GROUP); addr.sin_port=htons(PORT); while(1) { if(sendto(fd, message, strlen(message), 0, (struct sockaddr *) &addr, sizeof(addr)) < 0) { perror("sendto()"); exit(EXIT_FAILURE); } sleep(1); } return 0; }
listener.c - recepción de mensajes
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #define PORT 9999 #define GROUP "225.0.0.37" int main(int argc, char *argv[]) { struct sockaddr_in addr; int fd, nbytes; unsigned int addrlen; struct ip_mreq mreq; char msgbuf[256]; u_int yes=1; if((fd=socket(AF_INET,SOCK_DGRAM,0)) < 0) { perror("socket"); exit(1); } if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)) < 0) { perror("setsockopt() SO_REUSEADDR"); exit(1); } memset(&addr, 0, sizeof(addr)); addr.sin_family=AF_INET; addr.sin_addr.s_addr=htonl(INADDR_ANY); addr.sin_port=htons(PORT); if(bind(fd,(struct sockaddr *) &addr, sizeof(addr)) < 0) { perror("bind"); exit(1); } mreq.imr_multiaddr.s_addr=inet_addr(GROUP); mreq.imr_interface.s_addr=htonl(INADDR_ANY); if(setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) { perror("setsockopt"); exit(1); } while(1) { addrlen=sizeof(addr); if ((nbytes=recvfrom(fd, msgbuf, sizeof(msgbuf), 0, (struct sockaddr *) &addr, &addrlen)) < 0) { perror("recvfrom"); exit(1); } puts(msgbuf); } return 0; }
No hay comentarios:
Publicar un comentario