This is a practice in socket programming, threads, and synchronization. You are supposed to implement a rudimentary chatting application. The application will run on a client/server model which means that you’ll build two different programs: a server and a client. For simplicity we’d say that one instance of the server will be running and multiple clients can connect to the server and chat to each other using this server program as an intermediary. The server and clients may run on the same PC or on different ones.
All the PCs connected under a single network can communicate with each other. Which means that even if the internet is not working, but they are connected through a router, they can still communicate.