Einzelnen Beitrag anzeigen

m0sch3r

Registriert seit: 29. Mär 2004
121 Beiträge
 
Delphi 7 Enterprise
 
#1

Socket Handle ändert sich bei der selben Verbindung (TidFTP)

  Alt 25. Dez 2004, 14:29
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...)
  Mit Zitat antworten Zitat