/* File : tcp_uppercase_echo_client.c Programmer : Nasif Ekiz Date : Description : This is the client side of a TCP client/server application where the client sends a message to the server and server responds with an modified echo message where the incomming message is converted to all uppercase message. The client prints the modified incomming message on the screen and closes the socket. */ #include #include #include #include #include #include #include #include #define STRING_SIZE 1024 int main(void) { int sock_client; // client socket struct sockaddr_in server_addr; // structure that stores server address struct hostent * server_hp; // structure to store server's IP address char server_hostname[STRING_SIZE]; // server's hostname unsigned short server_port; // server's port char sentence[STRING_SIZE]; // send message char modifiedSentence[STRING_SIZE]; // receive message unsigned int msg_len; // length of message int bytes_sent, bytes_recd; // number of bytes sent and received /* open a socket AF_INET : IPv4 protocol SOCK_STREAM : stream socket IPPROTO_TCP : TCP transport protocol */ if ((sock_client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { perror("Client : can't open stream socket"); exit(1); } // initialize server address information printf("Enter hostname of server : "); scanf("%s", server_hostname); // get host name if ((server_hp = gethostbyname(server_hostname)) == NULL ) { // make a DNS look up query perror("Client : invalid server hostname"); close(sock_client); exit(1); } printf("Enter port number of server: "); scanf("%hu", &server_port); // get server's port number // clear server address structure and initialize with server address memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; // copy the server's IP address obtained by DNS look up into the server address structure memcpy((char *)&server_addr.sin_addr, server_hp->h_addr, server_hp->h_length); server_addr.sin_port = htons(server_port); // convert port number from host byte order // to network byte order and assign it to // server's port number // connect to server if (connect(sock_client, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) { perror("Client : can't connect to server"); close(sock_client); exit(1); } // user interface printf("Please input a sentence :\n"); scanf("%s", sentence); msg_len = strlen(sentence) + 1; // send message length // send message bytes_sent = send(sock_client, sentence, msg_len, 0); // get response from server bytes_recd = recv(sock_client, modifiedSentence, STRING_SIZE, 0); // print incomming echo message from server printf("\nThe response from server is : \n"); printf("%s\n\n", modifiedSentence); // close the socket close(sock_client); }