Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: TServerSocket OnClientRead - Client # identifzieren

  Alt 8. Mär 2010, 20:00
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat