meta data for this page
This is an old revision of the document!
22.8.2012: Initial version.
Assignment3: Aphorism exchange system
Third assignment is to implement an aphorism exchange system according to protocol described below. The system must be implemented with UDP. One has to implement a client and a server. Server listens in certain port (remember that you have no rights to use system ports between 1 – 1024 on class 6325 machines) and client sends UDP datagrams into that particular port using the IP address of the server and server responds based on the message contents.
Client can either add aphorisms to the database of the server or retrieve them from the server's database. The client sends a message to server, waits for a response from the server, informs the user about response and then quits. Client should get the command from a command line parameter. When adding an aphorism the client must request the aphorism from the user (via standard input).
Server can store up to 10 aphorisms and serves one request at a time. It is required to store the IP-address of the sender with the exact date and time along the sent aphorism. If the database is full server should response with appropriate message. If the command is not recognized server should return usage instructions in a message.
Server must not crash if it receives something else than described in the protocol. Same applies for client. Client must inform the user if server is not found. Client must not crash because of the invalid input given by user.
IPv4 and IPv6 must be supported. Use
AF_INET6 type socket and allow data from IPv4 mapped addresses although there exists some risks with this. For more details see TLDP.org Linux IPv6 HOWTO 22.214.171.124. IPv4 Mapped Addresses and/or read chapter 4.3 in IPv6 Network Programming book.
- Use UDP-protocol for data transfer (remember that UDP is connectionless protocol).
- Sending and receiving messages over UDP.
- Do not use
- IPv4 & IPv6 support.
- Implement client and server.
./aphorismclient -h <server address> -p <port number> -c <command>
- <server address> - The IP address or hostname of the server
- <port number> - Listening port of the server
- <command> - ADD or GET
- When ADD command is used the client waits for user to input the aphorism.
- Quit after receiving a response from server.
./aphorismserver -p <listening port>
- <listening port> - Port that server listens for incoming datagrams
- Can store 10 aphorisms.
- Save aphorisms into a text-file when the server is terminated.
- Read aphorisms from a text-file into database when starting the server.
- Runs until is stopped with Ctrl-C or
quitcommand from command line.
- Server must serve one request at a time. After serving one request process the next one.
- Iterative, no threads or
Add an aphorism:
|3 characters||10 to 509 characters|
For adding an aphorism to server. If the adding of an aphorism succeeded (database not full) server responds with AOK -message, otherwise with ERR. Minimum length for an aphorism is 10 characters. If the aphorism is less than this server responds with ERR. Example: ADDThat which does not kill us makes us stronger.\0
For requesting an aphorism from server. Server responds with an aphorism (APH message). Or if there is no aphorisms an ERR message is sent.
Protocol packets and data types from server to client:
AOK (Aphorism OK) message
Sent by server when adding of an aphorism was a success.
|3 characters||10 to 509 characters|
Aphorism sent by server. Example: APHBelieve nothing you hear, and only half of what you see.\0
|3 characters||0 to 509 characters|
Error message, sent when database is empty (response to GET) or full (response to ADD). Sent also when command is not recognized, in this case usage instructions are sent to client (separate commands to multiple lines). Example:ERRDatabase is full.\0
Additional notes and hints
- Server and client can not accept or send messages longer than 512 characters. Remember the terminating NULL in character strings!
- OPTIONAL (remember to mention this in readme!):
- Use dynamic list for aphorisms. Define a adjustable limit for maximum number of aphorisms (hardcoded, using
#defineor with additional startup parameter for the server)