/************************************************************************/    
/*                                                                      */
/* This is a simple client that use UDP in order to transmit data       */
/*                                                                      */
/*                                                                      */
/*                                                                      */ 
/************************************************************************/ 
    #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> 

    int main(int argc, char *argv[])
    {
	/************************/
	/*Definitions		*/
	/************************/
        int sockfd;
        struct sockaddr_in their_addr; 	/*Server address information 	*/
        struct hostent *he;		/*Struct for name resolving	*/
        int numbytes;			/*Number of bytes that were sent*/
	int I; 				/*Index				*/
	
        if (argc != 4) {
            fprintf(stderr,"usage: %s hostname port message\n",argv[0]);
            exit(1);
        }

	/*--------------------------*/
	/*Communication preparation */
	/*--------------------------*/

        if ((he=gethostbyname(argv[1])) == NULL) {  /*Transform host name into address	*/
            herror("gethostbyname");
            exit(1);
        }

        if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { /*Socket definition	*/
            perror("socket");
            exit(1);
        }

        their_addr.sin_family = AF_INET;      			/*Scoket address family		*/
        their_addr.sin_port = htons(atoi(argv[2]));  			/*Port in network byte order 	*/
        their_addr.sin_addr = *((struct in_addr *)he->h_addr);	/*Host address			*/
        bzero(&(their_addr.sin_zero), 8);     			/* zero the rest of the struct	*/


	/*----------------------*/
	/*Communication process	*/
	/*----------------------*/

	for (I=1;I<5;I++){

		printf("Now sending packet number %d \n",I);
	        if ((numbytes=sendto(sockfd, argv[2], strlen(argv[2]), 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;
    }