/***************************************************************************/ /* This sends a BROADCAST Limited message */ /* */ /* The program send message given as argument to the port given as */ /* second argument. */ /* */ /* */ /* */ /* */ /* */ /* Eddie Aronovich */ /***************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <netinet/in.h> #include <netdb.h> #include <sys/socket.h> #include <sys/wait.h> #include <arpa/inet.h> #define MAXBUFLEN 100 /* the port users will be connecting to */ int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in their_addr; /* connector's address information */ struct sockaddr_in my_addr; /* connector's address information */ int numbytes; int optval; /*Used to build the options for the broadcast */ int optlen; char buf[MAXBUFLEN]; /*The buffer that we read / write each time */ int addr_len; /* Address length for the network functions that require that */ unsigned long int net_id; /*The network id */ long int host_id; /*The hpst id in the network */ if (argc != 3) { fprintf(stderr,"usage: %s message port\n",argv[1]); exit(1); } if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { /* The socket should be changed to broadcast */ /* This part demands root permissions */ perror("socket"); exit(1); } optval=1; /*Prepare the options of the socket for Broadcast */ optlen=sizeof(int); if(setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,(char *) &optval,optlen)){ perror("Error setting socket to BROADCAST mode"); exit(1); } their_addr.sin_family = AF_INET; /* Protocol family - host byte order */ their_addr.sin_port=htons((unsigned short) atoi(argv[2])); /* port - short, network byte order */ their_addr.sin_addr.s_addr=htonl(INADDR_BROADCAST); /* send to all */ /*their_addr.sin_addr.s_addr=inet_addr("enter here the IP addres in dot notation"); */ /* send to all */ bzero(&(their_addr.sin_zero), 8); /* zero the rest of the struct */ if ((numbytes=sendto(sockfd, argv[1], strlen(argv[1]), 0, \ (struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == -1) { perror("sendto"); exit(1); } printf("sent %d bytes to %s\n",numbytes,inet_ntoa(their_addr.sin_addr)); close(sockfd); return 0; }