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.
SendData
Disconnect
Connect
SendData
StopServer
StartServer
Kommunikation erfolgt mit Windowsmessages und oder Callbacks.
Hoffe dir damit geholfen zu haben.
lg.