Multithreaded GetFile Server/Client

In this project, I designed and implement a multi-threaded server that serves static files based on the GetFile protocol, which is a simple HTTP-like protocol. Alongside the server, I also created a multi-threaded client that acts as a load generator for the server. Both the server and client were written in C. While I can not show the code, I have the design for my implementation shown below.

For both the client and the server, I followed a boss-worker thread pattern.

On the server side, the boss thread listens to the socket and accepts new connection requests. The new connections are fully handled by worker threads.

On the client side, a pool of worker threads are initialized. Once the worker threads have been started, the boss enqueues the requests to them. They should continue to run. Once the boss confirms all requests have been completed, it terminates the worker threads and exit.

design for the multithreaded file server
design for the multithreaded getFile client