Due: October 9 (By 11:59pm)


There are a number of objectives to this assignment. The first is to make sure you have some experience actually doing a simple socket programming assignment. Second, it will help you tune up your programming skills and prepare you for the other assignments in this course. Third, because you can use the Internet to look for examples, this assignment will help you see just how many network programming aids are available via the web. And finally, because this assignment has MANY small details, it will give you an awareness of just how much you have to pay attention to when we get to application layer protocols.


The goal of this assignment is to implement a TCP client and server, and a UDP client and server (for a total of four different programs). You can use either C or Java. You should choose the language you expect to use for the rest of this course's programming assignments and project. Your TCP or UDP client/server will communicate over the network and exchange data.

The server will start in passive mode listening on a specified port for a transmission from a client. Separately, the client will be started and will contact the server on a given IP address and port number that must be entered via the command line. The client will pass the server a string consisting of a sequence of characters. If the the string contains anything but numbers, the server will respond with "Sorry, cannot compute!" and exit. If the string contains all numbers, the individual digits will be added together and returned as a string (see below for an example). If the server sends a "Sorry" response to the client it will immediately exit. If the server receives a string of numbers, it will (1) add the digits together, (2) send the value back to the client, and (3) will not exit unless the response is a single digit. This process will be repeated until there is only one digit remaining. Note: the server will send a new packet each time Step (2) is executed, and the client will expect to receive a packet until there is only a single digit. See below for the exact output.



You will choose either Java or C for this assignment. In either case, you must turn in exactly four programs (all headers, etc. should be included in the one file). If you are using C, the programs should be: To compile your C code, use the following two commands:
"gcc -g -o client_c_udp client_c_udp.c" and
"gcc -g -o server_c_udp server_c_udp.c"

For Java, the program names should be:

To compile your Java code, use the following commands:
"javac server_java_udp.java"
"javac client_java_udp.java"
"javac server_java_tcp.java"
"javac client_java_tcp.java"

NOTE: Pay attention to all of these directions carefully. An automated checker will be used and if there are any deviations, you will lose points!

The assignment should be submitted as an email attachment. The email should be sent to kharras@cs.ucsb.edu with a subject of "276 hw1" (without quotes). The attachment should be a single gzip'ed and tar'ed file called "<username>.tar.gz". Untar'ing the file should create a subdirectory named "username" and should include the exact four files described above.

Grading Guidelines

You may use pieces of code from the Internet to help you do this assignment (e.g. basic socket code). However, this is just like citing a passage from a book, so if you copy code, you must cite it. To do this, put a comment at the beginning of your code that explains exactly what you have copied, who originally wrote it, and where it came from.

Below is a breakdown of points for this assignment. In addition to correctness, part of the points count towards how well code is written and documented. NOTE: good code/documentation does not imply that more is better. The goal is to be efficient, elegant and succinct!

Cheating Policy

This assignment is to be done individually. Cheating will not be tolerated. Please read the UCSB Academic Code of Conduct to find out more about Student Conduct and Discipline. Of particular relevance to this assignment is the need to properly cite material you have used. Failure to do so constitutes plagiarism.