Das meinte ich mit dem Eintragen des dazugehörigen Sockets in die
IP Liste. Sagen wir mal ein Client verbindet sich. Dann trägst du diesen mit
ListBox1.Items.Add(IP);
in die Liste ein.
Besser wäre es später statt einer ListBox z.b. eine TList mit einem Record zu verwenden, der sowohl
IP, als auch den Socket Pointer speichern kann. Als Workaround könntest du dir allerdings parallel zur ersten ListBox eine Zweite anlegen, die beim Verbinden mittels
ListBox2.Items.Add(IntToStr(Cardinal(Socket)));
das Socket speichert.
Später suchst du dann in deiner ListBox1 nach der
IP und findest diese z.B. an Index 2. Jetzt benutzt du
TCustomWinSocket(StrToInt(ListBox2.Items[2])).SendText(NACHRICHT);
zum Verschicken der privaten Nachricht an den richtigen Clienten.
Die Variante mit den zwei ListBoxen ist alles andere als schön und wie gesagt eher ein Workaround. Würde dir allerdings dringend raten das ganze auf TList unzuschreiben.