Assignment #0 - Socket Programming and Network Measurements

Due on Wednesday, September 10. Please email your written report (in PDF or PostScript) to the CS257 account (cs257@cs.rochester.edu) by midnight September 10. Late turn-ins will NOT be accepted.

The purpose of this assignment is to give you experience on socket-based network programming and basic techniques of network measurements. Sockets are the key interface between applications and networking systems. In this assignment you are asked to write simple programs with TCP sockets. You can write your program in C/C++ or Java. However, I strongly encourage you write it in C/C++ since Java contains unnecessary fat that makes accurate measurement very difficult. In particular, you won't be able to use Kai Shen's high resolution timer unless you program in C/C++.

Warmup on Socket Programming:
This part is a warmup on socket programming and it will NOT be graded. You can skip this part if you are already fairly familiar with socket programming. For this part, you will implement is a client and server that communicate over the network. The server is essentially an echo server with a little additional functionality. Instead of simply echoing the string it receives, the server returns a string with all upper case letters replaced by lower case letters and every space changed to a '.'. Here is what the client and server do:

Here is an example how your server should work. Assume that you start a server on machine foo.csug.rochester.edu (this machine doesn't really exist, find one yourself) listening to port number 32000. The syntax should look like the following:

Then you run a client on machine foobar.csug.rochester.edu using the following arguments:

The Real Assignment:
For the measurement assignments, you may need to repeat the experiment many times and then take the average. Use a high resolution timer whenever necessary. The goal is to have STABLE measurement results. For comparison purposes, all measurements MUST be done on Linux machines of the undergraduate lab or the graduate software lab.

Turn-in:
You should turn in a written report for this assignment and indicate the location of your source code for solving each question.