Autor Beitrag
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 24.08.05 15:07 
Ich benutze die TClientSocket-/TServerSocket-Komponenten. Wie kann ich beim Server die Clients auseinanderhalten?

Wenn Daten beim Server eintreffen, wird das Ereignis .OnClientRead ausgelöst. Dabei wird der betroffene Socket direkt als Parameter mit übergeben. Dieser Beispiel-Code sendet den empfangenen Text einfach direkt zurück:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  var
    Msg: String;
begin
  // Die Nachricht vom Client lesen (Annahme: es handelt sich um Text!)
  Msg := Socket.ReceiveText;
  // Variante (A) direkt zurückschreiben:
  Socket.SendText(Msg);
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  var
    Msg: String;
    i: Integer;
begin
  // Die Nachricht vom Client lesen (Annahme: es handelt sich um Text!)
  Msg := Socket.ReceiveText;
  // Variante (B) den Socket identifizieren...
  for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
    if (Socket = ServerSocket1.Socket.Connections[i]) then
    begin
      // ...dann über das ServerSocket-Array antworten...
      ServerSocket1.Socket.Connections[i].SendText(Msg);
      // ...und z.B. den Index melden
      ShowMessage('Nachricht von Client Nr.'+IntToStr(i)+':'+#13+Msg);
    end;
end;

Der Socket-Parameter ist so gesehen eine Referenz auf den Eintrag im ServerSocket-Array; es ist also nicht unbedingt notwendig, auf die Eigenschaften des ServerSockets zurückzugreifen, man kann auch direkt den übergebenen Socket-Parameter verwenden.

Moderiert von user profile icondelfiphan: Beitragsformatierung überarbeitet.
Moderiert von user profile iconjasocul: Beitrag geprüft am 08.06.2006