Der Server ist auf einem PC, dessen
IP den Clients bekannt ist (entweder über eine Domain, oder indem man sie mit einem UDP Broadcast findet)
Wenn ein Client gestartet wird und man seine Daten eingegeben hat, verbindet er zum Server und loggt sich ein.
Der Server schickt allen verbundenen Clients, die den gerade verbundenen Client in der Kontaktliste haben und gerade online sind die Nachricht, dass der Client jetzt online ist.
Der Server schickt dem Client der gerade verbunden hat die Kontaktliste und wer der Kontakte gerade online ist.
Wenn jemand einem anderen Clienten eine Nachricht schickt, wird Nachricht und Empfänger dem Server geschickt, der leitet die Nachricht dann weiter, wenn der Absender die Berechtigung hat, den Empfänger anzuschreiben. (z.B. wenn er in der Kontaktliste ist)
Wenn der Server bemerkt, dass ein Client die verbindung getrennt hat, schickt er das allen Clients, die den Benutzer in der Kontaktliste haben und gerade online sind.
Mehr gibt es eigentlich nicht zu wissen, außer vielleicht die technische Umsetzung. (wie man verbindet usw.)