Vielleicht passt Du dein Konzept einfach dem 'as-is' an.
So ein Socket kennt doch seine
IP-Adresse.
Wie gesagt, 'welcher' Client dich gerade angerufen hat, sagt die Socket-Instanz aus. Ein und der selbe Client wird immer den gleichen Socket verwenden, also könntest Du eine ClientID aus 'Integer(Socket)' erstellen. Oder eben du klebst -wie in meinem Beispiel- die Clientdaten gleich an die Data-Eigenschaft. Denn dazu ist sie doch da.
Einen Index kannst Du auch so vergeben, aber wozu, versteh ich immer noch nicht:
Delphi-Quellcode:
procedure TfmMain.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.Data := Integer (ErsterFreierIndexInMeinemArray);
MeinArray[integer(Socket.Data)] := irgendwas;
end;
procedure TfmMain.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
MeinArray [Integer(Socket.Data)] := 0;
end;
procedure TfmMain.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
Var
SocketIndex : Integer;
begin
SocketIndex := Integer (Socket.Data);
end;
Du brauchst nicht wirklich einen Index....
Mir fällt gerade ein, du könntest einen brauchen, wenn du die Clients in einer Tabelle (TStringGrid o.ä.) darstellen willst. Dann merkst Du dir den Index einfach in deinen TUserDaten, die Du an die 'Data'-Eigenschaft gepeppt hast, so ähnlich, wie in dem 2.Beispiel.