In this programming project, you will implement a simple file upload and download service based on
message-oriented client-server communication and a computation service using remote procedure call
(RPC) based communication.
The file server supports four basic operations: UPLOAD, DOWNLOAD, DELETE, and RENAME. We assume
that the file service is implemented using a connection-oriented protocol, in which the client and server
first establish a network connection, negotiate the operation to be performed, and carry out the file
transfer through the same connection. To simplify the design, you can assume that file operations are
atomic and the server does not need to support interruptions to a file transfer.
The computation server provides a set of predefined RPCs that can be called from a client. The RPCs
support a variety of computations on different types of data structures, including scalar variables,
arrays, and matrices.
You can use any programming language to implement the servers, though some approach is easier to
implement using a specific language.