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:
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 Msg := Socket.ReceiveText; Socket.SendText(Msg); end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var Msg: String; i: Integer; begin Msg := Socket.ReceiveText; for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do if (Socket = ServerSocket1.Socket.Connections[i]) then begin ServerSocket1.Socket.Connections[i].SendText(Msg); 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 delfiphan: Beitragsformatierung überarbeitet.
Moderiert von jasocul: Beitrag geprüft am 08.06.2006