Simple instant messaging system to be written in Java.
Develop client, server and the network protocol that they use to communicate.
The server should accept connections from an arbitrary number of clients. Clients will have a graphical user interface and should be able to accept and receive text-based messages, to indicate if the user is busy, available or idle and to convey usernames and other details.
Must provide all code which must be thoroughly commented.