/* client.c */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define bzero(b, len) (memset((b), '\0', (len)), (void) 0)
#define bcopy(b1, b2, len) (memmove( (b2), (b1), (len) ), (void) 0)

int main(int argc, char *argv[]) {
        int portNumber = 10005;
        printf("Client started.\n");

        /* socket */
        printf("socket\n");
        int mySocket = socket(AF_INET, SOCK_STREAM, 0);
        if( mySocket == -1 ) {
                printf("Bad socket.\n");
                exit(1);
        }

        /* connect */
        printf("connect\n");
        struct hostent *server;
        server = gethostbyname(argv[1]);
        if( server == 0 ) {
                printf("Bad server.\n");
                exit(-1);
        }
        struct sockaddr_in serverAddress;
        bzero((char *) &serverAddress, sizeof(serverAddress));
        serverAddress.sin_family = AF_INET;
        bcopy((char *)server->h_addr,
              (char *)&serverAddress.sin_addr.s_addr,
              server->h_length);
        serverAddress.sin_port = htons(portNumber);
        int connectionValue = connect(mySocket, (const struct sockaddr *)&serverAddress, sizeof(serverAddress));
        if( connectionValue == -1 ) {
                printf("Bad connection.\n");
                exit(-1);
        }

        /* send */
        printf("send\n");
        char sendBuffer[1024];
        sprintf(sendBuffer, "This is the message from the client.");
        printf("Message sent: %s\n", sendBuffer);
        int sendFlags;
/*      send(mySocket, sendBuffer, strlen(sendBuffer), sendFlags); */
        int messageLength = write(mySocket, sendBuffer, strlen(sendBuffer));

        /* recv */
        printf("recv\n");
        char recvBuffer[1024];
        bzero(recvBuffer, 1024);
        int recvFlags;
/*      int messageLength = recv(mySocket, recvBuffer, 1024, recvFlags); */
        messageLength = read(mySocket, recvBuffer, 1024);
        printf("Message received: %s\n", recvBuffer);

        /* close */
        printf("close\n");
        close(mySocket);

        return 0;
}
