Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Server/Clint Sockets - Authentifizierung programmieren??? (https://www.delphipraxis.net/32958-server-clint-sockets-authentifizierung-programmieren.html)

romber 30. Okt 2004 14:23


Server/Clint Sockets - Authentifizierung programmieren???
 
Hallo!

Ich benutze für meine Anwendungen die Komponenten TServerSocket und TClientSocket. Zurzeit habe ich es so, dass der Server ab und zu Daten an alle aktive Client sendet:

Code:
...
for i := 0 to Server.Socket.ActiveConnections - 1 do
begin
 Server.Socket.Connections[i].SendText('Irgendwas')
end;
...
Ich möchte jetzt aber so machen, dass Clients sich bei der Verbindung authentifizieren müssen und die Daten nur an erfolgreich eingeloggten Clients gesendet werden. Aber ich habe so was noch nie gemacht und bräuchte ein Paar Tips, wie das überhaupt funktioniert und wo ich anfangen soll. Dabei habe ich überlegt (vielleicht lege ich falsch, nur ein Paar Gedanken), dass man ab sofort für jede Client-Verbindung vielleicht einen Thread (TClientServerThread oder was ähnliches) erstellen soll und damit jede Verbindung einzeln behandeln soll, denn die o. g. Code in diesem Fall meiner Meinung nach nicht mehr einsetzbar ist. Das Problem ist, dass ich in Sachen Sockets nur wenig Ahnung habe, deswegen würde ich micht freuen, wenn ich hier ein Paar wertvolle Tips oder Code-Beispiele erhalten konnte. Danke!

MfG,
Ralf

runningsoft 30. Okt 2004 18:49

Re: Server/Clint Sockets - Authentifizierung programmieren??
 
Hallo Romber,

ich habe mir zu diesem Zweck ein kleines "Übertragungsprotokoll" erstellt, dass ich dann mittels SendBuf (anstatt SendText) verschicke.

Dieses Protokoll besteht im Prinzip aus einem Record in dem ich u.a. eine ID für die Clients, einen Anweisungsstring sowie den eigentlichen Meldungsstring untergebracht habe.

Beim erfolgreichen Anmelden am Server erhält der Client, der mit der ClientID -1 initialisiert wurde, vom Server seine ClientID mitgeteilt.

Bei jeder Meldung, die ich nun vom Server an die Clients sende, wird die ClientID des Clients mitgeschickt, für den die entsprechende Meldung gedacht ist.

Das eigentliche Versenden erfolgt immer noch an alle angemeldeten Clients:

Delphi-Quellcode:
for AnzahlClients := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
   begin
   ServerSocket1.Socket.Connections[AnzahlClients].SendBuf(MessageRec,SizeOf(MessageRec));
   end;
Im OnRead - Ereignis eines jeden Clients werte ich nun nach Empfang des Buffers zuerst die ClientID aus. Ist die gesendete Clíent-ID identisch, mit der ID des Clients, weiß er "Hallo, ich bin gemeint", ansonsten wird die Nachricht einfach ignoriert.

Steffen


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz