unix client server

Job ID: 35389735

Budget: $250 – $750 USD

Your task is to develop a limited math server that can solve two specific mathematical problems: (i) matrix inversion, (ii) k-
means clustering. You will also develop a client program that can communicate with the server by sending the problem data and
receiving the computed results. Note that when you are developing and testing your code, you will work will the same physical
1
DV1457/DV1578: Lab 3 2022 fall, lp1
device (i.e., your computer) and simply run the compiled server.c and client.c programs from different terminals. However,
keep in mind that it must be possible to execute your server and client programs from different computers in a network. In the
real-world, the client programs will run on different computers while the server program is running on another computer.
After you finish writing your code, the interaction between the server and a client should be as follows. The server program is
run from a terminal with a port number as the command-line parameter (see Section 1.5 for more details). The client program
is run from another terminal with the server’s IP and port as the command-line parameters. Then, the connection between the
server and the client processes is established. Let us call the two processes server and client1, respectively. The user
should now be able to send the problem data to the server process through the client process (via the socket) using the command
line. The server process receives the problem data from the client’s socket, computes the solution to the problem, and sends the
result back to the client process. The client process should give proper feedback to the user through the terminal whenever a file
is successfully sent or received. Once a result is received, the user should be able to send the next problem’s data to the server.
The server should support multiple clients at the same time. While the server is connected to a client (and likely solving its
problem), another client should be able to connect to the server, send its problem data, and also receive its result. In other
words, if the client program is run from yet another terminal with the server’s IP and port as the command-line parameters, the
connection between the server and this new client process should be established. Let us call this process client2. The server
should simultaneously solve problems of client1, client2, and other clients that may want to connect with it.
The server and client programs must be written in C, compile using gcc and run in Ubuntu’s latest LTS version. There shall be
no software limitation in the number of served clients or concurrent requests.