![]() |
Indy AContext.Data Zugriff disconnect
Hallo,
ich arbeite derzeit an einem weitreichenden System, bei dem als eine externe Komponente ein Geflecht aus Client - Serververbindungen (TCP) notwendig ist. Dies habe ich bisher alles mit Delphi realisiert und es klappt soweit auch alles. Das einzige Problem ist die eindeutige Identifikation der Clients. Diese MUSS für das restliche System über die Macadresse des Clients laufen, welche dieser in einem Record nach der Anmeldung am Server auch erfolgreich an diesen sendet. Die Macadresse soll dann in AContext.Data gespeichert werden. Serverseitiger Code: OnConnect:
Delphi-Quellcode:
Bei TClientIdentifier handelt es sich um eine Klasse von TObject die als einzige Definition mac:string; besitzt.
AContext.Data:=TClientIdentifier.Create;
OnExecute:
Delphi-Quellcode:
Data.Mac ist der empfangene Datensatz, welcher die Macadresse enthält.
if Assigned(AContext.Data) then
begin if AContext.Data is TClientIdentifier then begin TClientIdentifier(AContext.Data).Mac:=Data.Mac; end; end; An dieser Stelle verliert der Client immer die Verbindung und versucht, sich erneut zu verbinden. Kann im OnExecute Event nicht auf AContext.Data zugegriffen werden oder weshalb verliert der Client die Verbindung?! Viele Grüße! |
AW: Indy AContext.Data Zugriff disconnect
Zitat:
Delphi-Quellcode:
TClientIdentifier = class(TIdServerContext)
public Mac: string; end;
Delphi-Quellcode:
Damit braucht man auf AContext.Data nicht mehr zuzugreifen, sondern hat direkt ein passendes Objekt:
procedure TForm1.FormCreate(Sender: TObject);
begin IdServer.ContextClass := TClientIdentifier; end;
Delphi-Quellcode:
TClientIdentifier(AContext).Mac := Data.Mac; Ob das den Fehler erklärt kann ich nicht sagen, aber man kann sicher mit dem Debugger in die OnExecute Methode hinein und sehen was nach der Zuweisung geschieht. Hope this helps, |
AW: Indy AContext.Data Zugriff disconnect
Liste der Anhänge anzeigen (Anzahl: 1)
Vielen Dank :)
Jetzt müsste ich noch wissen, in welcher Unit TIdServerContext deklariert ist. Ansonsten hab ich die Änderungen alle übernommen. Edit: Ich habe jetzt verschiedene Kombinationen probiert und TClientIdentifier als class(TIdContext) erstellt. In OnExecute läuft alles bis zu
Delphi-Quellcode:
durch, wenn ich mit F8 Schritt für Schritt durchschalte, fliegt er genau an dieser Stelle raus und springt ins OnDisconnect.
TClientIdentifier(AContext).Mac:=Data.Mac;
Im OnCreate des Formulars habe ich TClientIdentifier als ContextClass gesetzt:
Delphi-Quellcode:
Ich hab mal im Anhang einen Screenshot der AContext Variable im OnExecute hochgeladen.
TCPServer.ContextClass:=TClientIdentifier;
Edit 2: Klappt nun alles, es lag anscheinend an einer weiteren Variable von TClientIdentifier, welche aufgrund der neuen Klasse nicht mehr zugänglich war und dann einen Fehler verursacht hat. Danke für die Hilfe! Viele Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz