You will implement a reliable FTP client-server system.
Provide a simple menu to the user, e.g.
1. GET
2. PUT
3. CD
4. QUIT
Your code must be robust and handle any incorrect user input. Since there
can be
multiple clients querying the server at the same time with each client
being serviced by a
different thread on the server, the server must ensure concurrency
control on the data file
while it is being updated. Thus, only one thread must gain access to the
data file during
writes (hint: use synchronized keyword for the write method in your
code).
Be sure to terminate each thread cleanly after each client request has
been serviced.
Implement the project as described using Java Datagrams (UDP). This will
be a
connectionless client-server system since UDP is connectionless. However,
you will need
to provide reliability in your client-side application code since UDP
does not guarantee
delivery. You may use the CRC32 checksum class available in the
java.util.zip package
in the JDK for this purpose.