Fröchliche Weinachten an alle.....
)
ich denke ich bin nicht der einzige der in solch einer festlichen Zeit sich geistig selber mißhandeld....
)
Das Problem:
Es findet eine Ubertragung enes Files durch
Indy FTP Server/client Komponente(TidFTP)
Zur Laufzeit des Programms mussen mehrere Verbindungen erschaffen werden dazu existiert eine Klasse die das ganze leitet..
Delphi-Quellcode:
//Classe die die ganzen FTP verbindungen menagt
TFTPDownloadClass =
Class(TObject)
protected
FFTPConnections :
array of TFTPConnection;
public
FInUse : boolean;
constructor Create;
procedure StartFTPConnection(DownloadFile : TDownloadfile);
//Startet eine neue FTP verbindung
function FTPExistsOnDfile(DownloadFile : TDownloadfile): boolean;
//Pruft ob ein Download existiert
procedure DelNotConnected();
//Schliest eine FTP verbindung
function GetConnectionOnHandle(
handle : double): TFTPConnection;
end;
//Type fur den array der FTP verbindungen
TFTPConnection =
record
FFTPConnction : TidFTP;
FFTPFile : TDownloadFile;
FFTPHandle : double;
end;
Beim starten eines Downloads wird der
Handle der aktuellen Verbindung zur den ganzen Daten zugefugt (Verzweiflungstat, normalerweise ist er auch so vorhanden(socket.binding.handle))
Das ninzufuegen des Handles zur der aktuellen Verbindung
Delphi-Quellcode:
FFTPConnections[high(FFTPConnections)].FFTPConnction.Connect();
///Schreibe den Socket Handel in eine Speziele Variable,
FFTPConnections[high(FFTPConnections)].FFTPHandle := FFTPConnections[high(FFTPConnections)].FFTPConnction.Socket.Binding.Handle;
An der Stelle wenn man den
Handle ausliest, hat er als Beispiel den Wert 1488
Während des Downloads...!!!! im onWork Ereignis des sockets, möchte ich durch den
Handle auf die ganzen Daten zugreifen die mit dem Socket verbunden sind(Filename, Filegröße u.s.w...)
Das OnEreignis wurde zur Laufzeit hinzugefugt
@FFTPConnections[high(FFTPConnections)].FFTPConnction.OnWork := @FTP1Work;
im OnWork Event wird durch das Casten auf die Eingenschaften des Sockets zugegrifen...!!
Delphi-Quellcode:
procedure FTP1Work(Self, Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
var
Dummy : TFTPConnection;
begin
Dummy := FTPVerbindungen.GetConnectionOnHandle(TidFTP(Sender).Socket.Binding.handle);
end;
Leider hat das
Handle an dieser Stelle den Wert 1464 (Wert beim Verbindugsaufbau 1488).
Zur Testzwecken wird nur eine
FTP verbindung aufgebaut, von daher kann theoretisch die selbe Verbindung keine zwei verschiedene Handles haben...!!!!
Wieso ändert sich das
Handle bei der selben Verbindung..!?
bin jedem für jegliche Hilfe dankbar...
)