Ich hatte es in meinem Chat immer so, dass alle Nachrichten über den Server laufen. Der Server hatte logischerweise auch eine Liste mit den Namen aller verbundener Clienten. Anhand dieser konnte bei privaten Nachrichten die
IP und das entsprechende Socket herausgefunden werden, an das die Nachricht gesendet werden soll.
Beim Anlegen der Liste ist es sinnvoll einen Pointer auf das entsprechende Socket direkt nach der Authentifizierung zusätzlich im List Struct zu speichern. Das vereinfacht den Zugriff auf die einzelnen Verbindungen enorm.