/*****************************************************************************/
/* Simple TCP client                                                         */
/*                                                                           */
/* The client get the following input:                                       */
/*   * Address / name of the host which runs the server                      */
/*                                                                           */
/*                                                                           */
/* Process:                                                                  */
/*   The clients resolves server name (no resolution is needed for address)  */
/*   Conenction with the server                                              */
/*   Passing the message to the server                                       */
/*                                                                           */
/* Termination:                                                              */
/*   Close the connection as needed                                          */
/*                                                                           */
/*                                                                           */
/*                                                                           */
/* The source is taken from Beej's Guide to Network Programming              */
/*                                                                           */
/*                                                                           */
/*                                                                           */
/*****************************************************************************/

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <errno.h> 
    #include <string.h> 
    #include <netdb.h> 
    #include <sys/types.h> 
    #include <netinet/in.h> 
    #include <sys/socket.h> 

    #define PORT 9999           /* the port client will be connecting to */
    #define MAXDATASIZE 100     /* max number of bytes we can get at once */

    int main(int argc, char *argv[])
    {
        int                     sockfd, numbytes;       /*Socket file descriptor & bystes sent  */
        char                    buf[MAXDATASIZE];       /*The string to be passed               */
        struct  hostent         *he;                    /*Is needed for address resolution      */
        struct  sockaddr_in     their_addr;             /* connector's address information      */

        if (argc != 3) {                                /*If not enaugh parameters were passed */
            fprintf(stderr,"usage: %s hostname 'nnnn uuuu xxxx'\n",argv[0]);
            exit(1);
        }

        if ((he=gethostbyname(argv[1])) == NULL) {      /* Host name resolution                 */
            herror("gethostbyname");
            exit(1);
        }

        if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { /*Define the Internet socket,TCP*/
            perror("socket");
            exit(1);
        }

        their_addr.sin_family = AF_INET;                        /*Host byte order               */
        their_addr.sin_port = htons(PORT);                      /*Short, network byte order     */
        their_addr.sin_addr = *((struct in_addr *)he->h_addr);  /*Assign address of the server  */
        bzero(&(their_addr.sin_zero), 8);                       /*Zero the rest of the struct   */

        /*Connecting the server         */
        if (connect(sockfd, (struct sockaddr *)&their_addr, \
                                              sizeof(struct sockaddr)) == -1) {
            perror("connect");
            exit(1);
        }

	printf("size of argv[2] = %d\n ",strlen(argv[2]));
        if ((numbytes=send(sockfd, argv[2], strlen(argv[2]), 0)) == -1) {/*Recieve infor from the server*/
            perror("send");
            exit(1);
        }
        printf("sent: %s\n",argv[2]);


        if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1) {/*Recieve infor from the server*/
            perror("recv");
            exit(1);
        }

        buf[numbytes] = '\0'; /*The info from the server has no \0 at the end of string         */
        printf("Received: %s",buf);

        close(sockfd);

        return 0;
    }
