Description
Objectives:
-
Implement a client-server network application
-
Learn to use the sockets API
-
Use the TCP protocol
-
Refresh programming skills
The Program:
Design and implement a simple chat system that works for one pair of users, i.e., create two programs: a chat server and a chat client. The final version of your programs must accomplish the following tasks:
-
chatserve starts on host A.
-
chatserve on host A waits on a port (specified by command-line) for a client request.
-
chatclient starts on host B, specifying host A’s hostname and port number on the command line.
-
chatclient on host B gets the user’s “handle” by initial query (a one-word name, up to 10 characters). chatclient will display this handle as a prompt on host B, and will prepend it to all messages sent to host A. e.g., “ SteveO> Hi!!”
-
chatclient on host B sends an initial message to chatserve on host A : PORTNUM. This causes a connection to be established between Host A and Host B. Host A and host B are now peers, and may alternate sending and receiving messages. Responses from host A should have host A’s “handle” prepended.
-
Host A responds to Host B, or closes the connection with the command “\quit”
-
Host B responds to Host A, or closes the connection with the command “\quit”
-
If the connection is not closed, repeat from 6.
-
If the connection is closed, chatserve repeats from 2 (until a SIGINT is received).
Requirements:
-
chatserve must be implemented in Java or Python
-
chatclient must be implemented in C/C++.
-
Of course, your program must be well-modularized and well-documented.
-
Your programs must run on an OSU flip server (for example: flip1.engr.oregonstate.edu). Specify your testing machine in the program documentation.
-
Your programs should be able to send messages of up to 500 characters.
-
Use the directories in which the programs are running. Don’t hard-code any directories, since they might be inaccessible to the graders.
-
Be sure to cite any references, and credit any collaborators.
-
Provide a README.txt with detailed instructions on how to compile, execute, and control your program.
-
Combine all program files into one *.zip archive (no .7z or .gz allowed). The .zip file should not contain any folders – only files!
page 1 of 2
-
For your C implementation, read Beej’s Guide. It has everything you need for this assignment. You will probably learn the most about socket programming by using C.
-
If you are using Python, check http://docs.python.org/release/2.6.5/library/internet.html,
-
If you are using Java, check http://docs.oracle.com/javase/tutorial/networking/sockets/index.html.
-
It’s OK to hard-code host A’s handle.
-
It’s OK to implement this system so that it requires the two users to take turns sending messages, i.e., when a user sends a message, s/he must wait for a response before sending the next message.
-
When debugging, don’t use the well-known port numbers, because these will already be in use. I’d suggest using 30020 or 30021, though other students may be using these when you’re on the servers.
-
If you use additional include-files or make-files, be sure to include them in your .zip file.
-
You can test these programs using just one computer. Start the server, then start the client in a new window. You can then switch back and forth between the two terminal windows.
-
Project #1 will be accepted up to one week late with a penalty of up to 10% per day.
Extras:
-
If you implement extra credit features, be sure to describe those features in your program documentation and README.txt or you will not receive any credit.
-
There are many possibilities for extra credit. Be sure that your program satisfies the requirements first, and then do the extra credit in separate files.
-
Extra credit possibilities include (but are not limited to) …
-
Set up your programs so that either host can make first contact.
-
Make it possible for either host to send at any time (while the connection is active) without “taking turns”.
-
Make your server multi-threaded.
-
Split the screen to show host B’s typing in one panel, and host A’s responses in the other panel.
-
Make the characters appear on the receiving host as they are being typed on the sending host (instead of waiting for the entire line to be sent).
-
page 2 of 2