Description
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!
Notes:
- 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