Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Probleme mit TIdTrivialFtp (https://www.delphipraxis.net/141935-probleme-mit-tidtrivialftp.html)

easywk 19. Okt 2009 12:47


Probleme mit TIdTrivialFtp
 
Hallo zusammen,

ich habe etwas Probleme mit dem TrivialFtp von Indy. Im Prinzip möchte ich vom Client aus einfach eine Datei herunterladen. Im Client habe ich das Ganze auf einen Button gelegt, wobei FtpClient halt die TIdTrivialFTP-Komponente ist:

Delphi-Quellcode:
try
  FtpClient.Connect;
  St:=TFileStream.Create(Datapath+'daten.txt',fmCreate);
  FtpClient.Get('daten.txt',ST);
finally
  if Assigned(ST) then
    FreeAndNil(ST);
  if FtpClient.Connected then
    FtpClient.Disconnect;
end;
Im Serverprogramm gibt es ein FtpServer vom Typ TIdTrivialFtpServer mit den beiden nachfolgenden Events:
Delphi-Quellcode:
procedure TFormMain.FtpServerReadFile(Sender: TObject;
  var FileName: String; const PeerInfo: TPeerInfo;
  var GrantAccess: Boolean; var AStream: TStream;
  var FreeStreamOnComplete: Boolean);
var FS:TFileStream;
begin
  FreeStreamOnComplete:=TRUE;
  try
    // Verzeichnis umleiten auf das Datenverzeichnis, kein anderes Verzeichnis akzeptieren
    Filename:=Datapath+ExtractFilename(Filename);
    if FileExists(Filename) then
      begin
        FS:=TFileStream.Create(Filename,fmOpenRead or fmShareExclusive);
        AStream:=FS;
        GrantAccess:=TRUE;
      end
    else GrantAccess:=FALSE;
  except
    GrantAccess:=FALSE;
    if Assigned(FS) then
      FreeAndNil(FS);
  end;
end;

procedure TFormMain.FtpServerTransferComplete(Sender: TObject;
  const Success: Boolean; const PeerInfo: TPeerInfo; var AStream: TStream;
  const WriteOperation: Boolean);
begin
  try
    if Assigned(AStream) then
      FreeAndNil(AStream);
  except
  end;
end;
Das Problem: im Client komme ich aus dem Get nicht wieder und laufe dann auf ein Timeout. Das Connect geht problemlos klar.

Ich habe dann auf der Serverseite den Debugger laufen lassen. Die Dateianfrage kommt dort an, die Datei wird gefunden und die vom Stream angegebene Dateigröße stimmt mit 30417 Byte auch. Auch das TransferComplete-Event auf der Serverseite wird aufgerufen. Daher gehe ich davon aus, dass auf dem Server alles glatt geht - nur im Client kommt halt nichts an.

Hat jemand eine Idee, wo ich noch suchen kann oder was ich falsch mache?

Gruß
easy


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 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