#include #include #include #include #include #include #include #include #include #include #include #include #ifndef NULL #define NULL (void*)0 #endif #ifndef INADDR_NONE #define INADDR_NONE 0xffffffff #endif #define BUFSIZE 100 struct hostent *hp; char buff[BUFSIZE]; #define SERV_UDP_PORT 2795 main(int argc, char *argv[]) { int sockfd, i, s, alen, hlen, dlen, j, k; long ul; unsigned long inaddr; struct sockaddr_in serv_addr; unsigned char ch; if (argc==1) { printf("USAGE: send_udpu machine@somewhere.bla.ca\n"); printf("-or- send_udpu A.B.C.D\n"); printf(" within concordia CS machines just machine " "name is sufficient\n"); exit(0); } /* open socket for UDP protocol */ if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("error open socket"); exit(-1); } memset(&serv_addr, NULL, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(SERV_UDP_PORT); /* First try to convert hostname as a dotted-decimal number. * Only if that fails do we call gethostbyname(). */ if ( (inaddr = inet_addr(argv[1])) != INADDR_NONE) { /* it's dotted-decimal */ memcpy(&serv_addr.sin_addr, &inaddr, sizeof(inaddr)); } else { if ((hp=gethostbyname(argv[1])) == NULL){ printf("Problems with this host...\n"); exit(0); } serv_addr.sin_addr.s_addr = inet_addr(inet_ntoa(hp->h_addr)); } ul = serv_addr.sin_addr.s_addr; printf("sending to %s at the following addresses:\n",argv[1]); printf("%s\n",inet_ntoa(serv_addr.sin_addr)); printf("======================================================\n"); for (k = 0, s = 'A'; k < 10; k++, s++) { /* transmit packets */ for (i = 0; i < 26; i++) /* with 26 bytes of data in each packet */ buff[i] = s + i; j = sendto(sockfd, buff, i, 0, (struct sockaddr *) & serv_addr, sizeof(serv_addr)); if (j != i) { printf("send error\n"); exit(1); } printf("sent data %d Bytes\n", j); sleep(1); } }