Einzelnen Beitrag anzeigen

uoeb7gp
(Gast)

n/a Beiträge
 
#9

Re: TServerSocket und Benutzeranmeldung

  Alt 27. Nov 2009, 19:28
Hallo Schwedenbitter.

Also, die Clients kannst du so verwalten.

Delphi-Quellcode:
procedure TServerObj.ServerSocketClientConnect(const Sender: TObject;
  const Socket: TCustomWinSocket);
Diese Prozedure wird immer dann aufgerufen wenn sich ein Client zum Server verbindet.
Die Variable Socket identiffiziert den Client immer eindeutig.
Auf Grund dieser Eindeutigkeit kannst du dir für jede Clientverbindung eine Datenstruktur (ClientObjekt, Record etc.)
aufbauen. Dieses Clientobjekt speicherst du dir am besten in einer Ultra schnellen Hash Liste, da du bei jedem

Delphi-Quellcode:
procedure TServerObj.ServerSocketClientRead(const Sender: TObject;
  const Socket: TCustomWinSocket);
wieder an Hand des Socket das zugehörige Client - Objekt suchen musst.

Jedes Clientobjekt erhält ausserdem einen Empfangsbuffer, für die aus dem Socket gelesenen Daten.
Diese Aufteilung ist notwendig, da bei massivem Netzwerkverkehr die Datenpakete fragmentiert werden, und diese
Fragmente für jeden Client wieder zusammengesetzt werden müssen, solange bis die im Header angegebene Data-Size
für eine vollständige Übertragung erreicht ist, erst dann können die Daten weiterverarbeitet werden.

Hier ein Beispiel:

1. Client Connectet sich zum Server
2. Im ServerSocketClientConnect Event wird das Clientobjekt erzeugt.
3. ClientObjekt wird in einer Hashliste oder ähnlichen gespeichert.
4. Empfangen werden zB. 1020 Byte Daten (ServerSocketClientRead)
5. Hashliste wird mit der ID des sockets nach dem Clientobjekt durchsucht.
6. Die Empfangenen Daten werden in den Empfangsbuffer, des aus der Hashliste gesuchten, ClientObjektes geschrieben.
Analyse des Headers erfolgt.
Emfangsbuffer wird geprüft, ob die Datasize lt. Header Analyse schon vorhanden ist.
Wenn Ja, dann DataSize aus dem Buffer Extrahieren und weiter bei 7.
Wenn nein, alles von 1. bis Daten vollständig übertragen sind.
ACHTUNG wenn der Client sehr schnell viele Messages hintereinander zum Server sendet,
ist es möglich, dass der Empfangsbuffer auch mehrere vollständige und oder fragmentierte Datensätze enthält.
Dies musst du bei der Bufferanalyse (Datenextraction) auch noch berücksichtigen.
Hier musst du ordentlich Hirnschmalz hineinstecken!.
7. Message lt. ID im Header aufbereiten.


PS.
  • Meine Socket Dll's kapseln alles wie oben beschrieben, da brauchst du die eigntlich nur die Demos ansehen, wie
    diese zu verwenden sind.

Folgende Exportfunktionen (stdcall) sind vorhanden.
  • Client DLL:
SendData
Disconnect
Connect
  • Server DLL:
SendData
StopServer
StartServer

Kommunikation erfolgt mit Windowsmessages und oder Callbacks.

Hoffe dir damit geholfen zu haben.

lg.
  Mit Zitat antworten Zitat