In this assignment, you will write two complete C programs to support a client/server model using Linux sockets for a UDP "ping" utility, similar to the ping utility already available on our CSE machines.
Server
The server program will be called with one command-line argument, the port number being used, such as ./minor5svr 8001. If the user calls the server program with too few or too many arguments, you will print out a usage statement and terminate the program.
The server will set up a UDP socket on the Internet (i.e., INET) domain and then wait in an infinite loop listening for incoming UDP packets, specifically PING messages from a client.
Packet Loss UDP provides applications with an unreliable transport service. Messages may get lost in the network due to a variety of reasons. Since packet loss is rare or even non-existent in typical campus networks, the server in this lab will inject artificial loss to simulate the effects of network packet loss. The server will simulate 30% packet loss through generation of a seeded, randomized integer that will determine whether a particular incoming PING message is lost or not.
When a PING message comes in and if the packet is not lost, the server will print the client message to the terminal and then send a PONG message back to the client. If the packet is determined to be lost, the server will print an appropriate message to the terminal and simply "eat" the message by not responding to the client.
Client
The client program will be called with two command-line arguments, the hostname of the server and the port number being used, such as ./minor5cli cse06 8001. If the user calls the client program with too few or too many arguments, you will print out a usage statement and terminate the program.
The client will send 10 automated PING messages to the server on a UDP socket, where automated means the message is built in the code, not entered from the keyboard. Because UDP is an unreliable protocol, a packet sent from the client to the server may be lost in the network, or vice versa. For this reason, the client cannot wait indefinitely for a reply to a PING message. You should get the client to wait up to one second for a reply - if no reply is received within one second, your client program should assume that the packet was lost during transmission across the network.
Specifically, for each of the 10 PING messages, your client program should:
send the PING message using the UDP socket and print a status message;
if the response message is received from the server, calculate and print the round trip time (RTT) in milliseconds for each message; otherwise, print a status message that it timed out. o After all of the PING messages have been sent (and responses received or timed out), the client program should report:
the number of messages sent, the number of messages received, and the message loss rate (as a percentage);
the minimum, maximum, and average RTTs for all of the PING messages in milliseconds.
Your program should run on the INET domain using SOCK_DGRAM (i.e., UDP) sockets so that the server and the client execute on a different CSE machine.
Given the randomness of what messages get dropped, it could be that less than or greater than 30% of the messages are dropped. You will also need to make sure you are able to handle any error cases.
xyz0001@cse05:~/csce3600/$ ./minor5cli usage : ./minor5cli xyz0001@cse05:~/csce3600$ ./minor5cli cse04 usage : ./minor5cli xyz0001@cse05:~/csce3600$ ./minor5cli cse04 8001 1: Sent... RTT=0.983000 ms 2: Sent... RTT=0.245000 ms 3: Sent... RTT=0.208000 ms 4: Sent... RTT=0.237000 ms 5: Sent... RTT=0.199000 ms 6: Sent... Timed Out 7: Sent... RTT=0.483000 ms 8: Sent... RTT=0.352000 ms 9: Sent... Timed Out 10: Sent... RTT=0.515000 ms 10 pkts xmited, 8 pkts rcvd, 20% pkt loss min: 0.199000 ms, max: 0.983000 ms, avg: 0.279875 ms xyz0001@cse05:~/csce3600$ ./minor5cli cse04 8001 1: Sent... RTT=0.652000 ms 2: Sent... RTT=0.368000 ms 3: Sent... RTT=0.267000 ms 4: Sent... RTT=0.291000 ms 5: Sent... RTT=0.359000 ms 6: Sent... RTT=0.406000 ms 7: Sent... RTT=0.228000 ms 8: Sent... RTT=0.358000 ms 9: Sent... RTT=0.350000 ms 10: Sent... Timed Out 10 pkts xmited, 9 pkts rcvd, 10% pkt loss min: 0.228000 ms, max: 0.652000 ms, avg: 0.291889 ms
REQUIREMENTS:
Your code should be well documented in terms of comments. For example, good comments in general consist of a header (with your name, course section, date, and brief description), comments for each variable, and commented blocks of code.
Your programs should be named "minor5svr.c" and minor5cli.c, without the quotes, for the server and client code, respectively.
Your program will be graded based largely on whether it works correctly on the CSE machines (e.g., cse01, cse02, , cse06), so you should make sure that your program compiles and runs on a CSE machine.
It is not our intention to break the school's academic policy. Posted solutions are meant to be used as a reference
and should not be submitted as is. We are not held liable for any misuse of the solutions.
Please see the frequently asked questions page
for further questions and inquiries.
Kindly complete the form.
Please provide a valid email address and we will get back to you within 24 hours.
Payment is through PayPal, Buy me a Coffee
or Cryptocurrency.
We are a nonprofit organization however we need funds to keep this organization operating
and to be able to complete our research and development projects.