For this assignment, you will implement a gopher client and a gopher server. Your client and server will support the item type characters 0 and 1 (see section 3.8 of RFC 1436), but need not support any other item type characters.
Your server's command-line syntax should be
gopherd port root_dir
Here, "port" is the port number at which your server will listen. Since you may do some testing on prism, and prism already has a gopher server running on port 70, you will want to test using some other port number. The "root_dir" parameter will be the directory that will act as the top of your gopher server's tree of data. By making the directory tree a command-line argument, you can conveniently store all your gopher data in one directory and its subdirectories.
Your client's command-line syntax should be
gopher host port
Here, "host" and "port" identify the gopher server to which you wish to connect.
In any directory in the directory tree of data used by your gopher server, you can store a file named ".links". Your server should use this file to store enough information to allow the server to point the client to other gopher servers. Compare the behavior of the temporary Math/CS gopher server with the file /usr/lib/gopher-data/data/.links, for example. (To test our gopher server, use Netscape to go to gopher://prism.mathcs.carleton.edu/. IE doesn't seem to have a functional gopher client.)
I want you to work in teams of three or four. Once your team is assembled, please have one team member send me e-mail at ondich@mathcs.carleton.edu telling me who is on your team. Let me know if you are having trouble finding a team to work with.
I need one team of two people to do a special task. This team will not write a client or a server. Instead, this team will develop a testing plan for the other teams to work through in lab on Wednesday, January 16. If you are interested in being the testing team, let me know immediately.
Your client and server must be ready at 8:30 AM Wednesday, January 16. The testing lab will be concerned mostly with making sure the clients from one team work with the servers from another. That is, we are going to be testing whether we have multiple, independent, and interoperable implementations.
After testing on January 16, the final versions of your code and its associated documentation will be due at noon Thursday, January 17.
Hand in your full source code (including tcpUtilities.cpp and .h if you use them) and a gopher_readme.txt file describing the status of your code and any other details you want to include. All files, source and documentation, must include the names of all your team members. If you used ideas or code from other people, cite those people's contributions in the readme and in the relevant source files. The comment at the top of a source file is a good place for names, dates, and citations.
Hand in your work via HSP.
Make an incremental design and testing plan, and stick to it.
Use Netscape and/or telnet to test your server. Use the Math/CS gopher server to test your client. Once you have both working, you can, of course, use your client and server to test each other.
Your client's user interface can be simple text-based, or curses-based, or, if you have the time and the experience, GUI-based. A text-based client that interacts correctly with a variety of servers is preferable to a fancy UI that doesn't work.
This isn't an easy assignment, but you are all capable of completing it successfully. Work together. Don't be afraid to ask questions.
Have fun.