computer networks simple homework

User Generated

Sbttl1

Computer Science

Description

Three C programs have been posted above. (1) p3client.c is a TCP client, (2) p3server.c is a TCP server, and (3) forwarder.c is a combination of TCP client and server. Given forwarder.c is not working.

To compile the c programs, type "gcc –o p3client p3client.c", "gcc –o p3server p3server.c", and "gcc –o forwarder forwarder.c" in a terminal on Linux.

Modify “forwarder.c” as the following:

  1. p3server must start first and wait for a forwarder. Write C codes to establish a connection to p3server. For this connection, you must use TCP client. (50 Points)
  2. Once your forwarder is connected to p3server, a server in the forwarder will start (the related code was given). And then, p3client must start. If you type a word on p3client, p3client will send this word to the forwarder (the related code was given). Write C codes for the forwarder to send this word to p3server (50 points)

To run the programs on Linux, open three terminals, type ./server on the first terminal, ./forwarder on the second terminal and ./client on the third terminal.

Note:

  • Please see the detailed examples on "file 1" posted above
  • Do not modify p3client.c and p3server.c. The modified forwarder.c must be working with the given p3client.c and p3server.c
  • Submission: your forwarder.c

Unformatted Attachment Preview

// forwarder.c by Dr. Junwan Kim // This program MUST be used for only csci315 at UDC // #include #include #include #include #include #include #include #include #define PORTNUM1 2300 #define PORTNUM2 2400 #define MAXRCVLEN 500 int main(int argc, char *argv[]) { char* msg = "HI CSCI315 from Inter-server\n"; char buffer[MAXRCVLEN + 1]; int len, consocket; struct sockaddr_in dest; struct sockaddr_in serv; struct sockaddr_in client; int server_socket; int client_socket; // For server socklen_t socksize = sizeof(struct sockaddr_in); memset(&serv, 0, sizeof(serv)); serv.sin_family = AF_INET; serv.sin_addr.s_addr = htonl(INADDR_ANY); serv.sin_port = htons(PORTNUM1); server_socket = socket(AF_INET, SOCK_STREAM, 0); bind(server_socket, (struct sockaddr *)&serv, sizeof(struct sockaddr)); // // // // Write your code for for client here socket, connect, and recv here printf("As a client, I Received %s \n", buffer); memset(buffer, 0, strlen(buffer)); printf("Server starts...\n"); do{ listen(server_socket, 1); consocket = accept(server_socket, (struct sockaddr *)&dest, &socksize); send(consocket, msg, strlen(msg), 0); while(len=recv(consocket, buffer, MAXRCVLEN, 0)>0){ printf("Received: %s ", buffer); // As a client, send "buffer" here if(strncmp(buffer, "exit", 4) == 0){ break; } memset(buffer, 0, strlen(buffer)); } printf("Goodbye !\n"); close(consocket); }while(consocket); close(client_socket); close(server_socket); return EXIT_SUCCESS; } // //Client.c by Dr. Junwhan Kim //This MUST be used for only CSCI315 at UDC // #include #include #include #include #include #include #include #include #define MAXRCVLEN 500 #define PORTNUM 2300 int main(int argc, char *argv[]) { char buffer[MAXRCVLEN + 1]; // for receiving int len, mysocket; struct sockaddr_in dest; char msg[MAXRCVLEN + 1]; // for sending mysocket = socket(AF_INET, SOCK_STREAM, 0); memset(&dest, 0, sizeof(dest)); dest.sin_family = AF_INET; dest.sin_addr.s_addr = htonl(INADDR_LOOPBACK); dest.sin_port = htons(PORTNUM); connect(mysocket, (struct sockaddr *)&dest, sizeof(struct sockaddr)); len = recv(mysocket, buffer, MAXRCVLEN, 0); if(len < 0){ perror("Reciver failed"); close(mysocket); return EXIT_FAILURE; } else{ buffer[len] = '\0'; printf("I Received %s \n", buffer); } while(1){ printf("Enter a character "); fgets(msg, sizeof(msg), stdin); if(strncmp(msg, "exit", 4) == 0) break; if(send(mysocket, msg, strlen(msg), 0) < 0){ perror("Send failed"); close(mysocket); return EXIT_FAILURE; } memset(msg, 0, strlen(msg)); } close(mysocket); return EXIT_SUCCESS; } // Server.c by Dr. Junwan Kim // This program MUST be used for only csci315 at UDC // #include #include #include #include #include #include #include #include #define PORTNUM 2400 #define MAXRCVLEN 500 int main(int argc, char *argv[]) { char* msg = "HI CSCI315\n"; char buffer[MAXRCVLEN + 1]; int len, consocket; struct sockaddr_in dest; struct sockaddr_in serv; int mysocket; socklen_t socksize = sizeof(struct sockaddr_in); memset(&serv, 0, sizeof(serv)); serv.sin_family = AF_INET; serv.sin_addr.s_addr = htonl(INADDR_ANY); serv.sin_port = htons(PORTNUM); mysocket = socket(AF_INET, SOCK_STREAM, 0); bind(mysocket, (struct sockaddr *)&serv, sizeof(struct sockaddr)); do{ listen(mysocket, 1); consocket = accept(mysocket, (struct sockaddr *)&dest, &socksize); send(consocket, msg, strlen(msg), 0); while(len=recv(consocket, buffer, MAXRCVLEN, 0)>0){ if(strncmp(buffer, "exit", 4) == 0){ break; } printf("Server Received: %s ", buffer); memset(buffer, 0, strlen(buffer)); } printf("Goodbye !\n"); close(consocket); }while(consocket); close(mysocket); return EXIT_SUCCESS; }
Purchase answer to see full attachment
User generated content is uploaded by users for the purposes of learning and should be used following Studypool's honor code & terms of service.

Explanation & Answer

At...


Anonymous
I was stuck on this subject and a friend recommended Studypool. I'm so glad I checked it out!

Studypool
4.7
Trustpilot
4.5
Sitejabber
4.4

Related Tags