You are to write a Hybrid version of P2P and Client/Server application. It follows a similar yet way simpler architecture as Skype.
The application consists of two programs. The first program is a Server that authenticates in a rather simplistic way users before they can engage in a chat. For the purposes of this project, the server will keep track of only 5 users in a basic plain text file. This file contains a name and an IP address. Example:
If you're doing all in one computer and without the use of virtual machines, you could have 127.0.0.1 for all users as all will be running locally.
The second application is the one which asks the user for its name and afterwards will initially connect to the Server to authenticate and upon successful authentication, will get the list of all the peers in their locations. The success of the authentication depends whether the user is registered or not in the list of the server. If the user name is not in the list, then the server will reply NULL instead of the list of user and locations. If NULL is received the application should print an error message accordingly and reask again for a user name.
Each peer should do the procedure mentioned above prior to chatting.
After there are at least two peers at least ON, then they can start chatting sending messages back and forth. These chat paradigm is in a pure P2P fashion. For this purpose, a multithreaded portion is necessary here. The multithreaded portion requires a thread running a client part and a thread running the server part. The client thread send messages and the server thread allows for receving them.
The first part of the project where authentication happens with the server must be done using TCP sockets.
The second part of the project where chat happens between peers must be done using UDP sockets.
Project Due: October 13, 2014