![]() |
idFTP: Download funktioniert nur in lokalem Netz
Hallo,
ich möchte einen FTP-Download durchführen, allerdings funktioniert er nur im lokalen Netz. Das im Code aufgeführte Formular soll die Datei herunterladen. Sobald der Download übers Internet durchgeführt werden soll, wird im Zielverzeichnis eine 0-Byte-Datei gleichen Namens angelegt und das Programm reagiert nicht mehr. Der FTP-Server (hier FileZilla) zeigt jedoch an, dass der Transfer ordnungsgemäß stattfindet. :?: Hier der code:
Delphi-Quellcode:
Wie gesagt, im lokalen Netzt läuft alles prima. Die Ordnerstruktur ist auch identisch, d. h. die Quell- und Zielordner sind beide vorhanden.
procedure TfrmDownload.btnCancelClick(Sender: TObject);
begin frmMain.IdFTP1.Abort; Close; end; procedure TfrmDownload.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; frmDownload := nil; end; procedure TfrmDownload.IdFTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64); begin pbDL.Position := aWorkCount; Application.ProcessMessages; end; procedure TfrmDownload.IdFTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64); begin pbDL.Max := IdFTP1.Size('Downloads\' + strProgFile); ; end; procedure TfrmDownload.FormActivate(Sender: TObject); var strDestFile : string; lStream : TFileStream; strMsg : string; qryTemp : TIBCQuery; begin qryTemp := TIBCQuery.Create(Application); with qrytemp do begin Connection := dmFBData.ConData; SQL.Text := 'SELECT INTMWMAIL, INTMWFTP, STRFTPHOST, STRFTPUSER, ' + 'STRFTPPW, INTFTPPORT ' + 'FROM SD_PARAMS'; try Open; idFTP1.Host := FieldbyName('STRFTPHOST').AsString; idFTP1.Username := FieldbyName('STRFTPUSER').AsString; idFTP1.Password := FieldbyName('STRFTPPW').AsString; idFTP1.Port := FieldbyName('INTFTPPORT').AsInteger; Close; except on E:Exception do begin strMsg := 'Fehler bei Ermittlung FTP-Daten, Meldung: ' + E.Message; ShowWarningEx(strMsg); end; end; Free; end; strDestFile := GetSpecialFolderLocation($23) + 'test\Updates\' + strProgFile; lStream := TFileStream.Create(strDestFile, fmCreate or fmShareDenyNone); try idFTP1.Connect; Application.ProcessMessages; idFTP1.Get('Downloads\' + strProgfile, lStream); except on E:Exception do begin ShowWarningEx('Fehler bei Download, Meldung: ' + E.Message); lStream.Free; idFTP1.Disconnect; Exit; end; end; idFTP1.Disconnect; lStream.Free; strMsg := 'Download beendet. ' + #13#10#13#10 + 'Das Programm wird nun beendet und aktualisiert. Nach der ' + 'Aktualisierung wird es neu gestartet.'; ShowInfo(strMsg); RunAndWaitShell(strDestFile, ' /sp- /silent', 0); Close; frmMain.Close; end; Hat vielleicht jemand einen Tip? Gruß Frank |
AW: idFTP: Download funktioniert nur in lokalem Netz
Dreh doch mal das
Delphi-Quellcode:
und das
lStream.Free;
Delphi-Quellcode:
um, vielleicht hilft das !
idFTP1.Disconnect;
|
AW: idFTP: Download funktioniert nur in lokalem Netz
Hallo,
danke für Deine Antwort, hab die beiden Anweisungen vertauscht, leider ohne Erfolg. Ich hab mal den Rest der Funktionen in obigem Code hinzugefügt, um zu zeigen, was sonst noch passiert. Die Progressbar fängt garnicht erst an zu "laufen", obwohl wie gesagt laut FileZilla-Server der Transfer stattfindet. Gruß Frank |
AW: idFTP: Download funktioniert nur in lokalem Netz
Technisch gesehen gibt es zwischen LAN und WAN keinen Unterschied. Kann es sein, dass eventuell die Firewall dazwischen funkt?
|
AW: idFTP: Download funktioniert nur in lokalem Netz
Musst du da nicht auch mit OnAfterGet bzw OnStatus arbeiten ? (siehe idFTP.Get Hilfe)
Indy ist doch m.E. Threaded aufgebaut, oder ? |
AW: idFTP: Download funktioniert nur in lokalem Netz
Hallo,
@Luckie: in beiden Firewalls ist Port 21 freigegeben, sollte also funktionieren, zumal der Connect ja funktioniert. @ChrisW: dann dürfte es im lokalen Netz auch nicht funktionieren, da, wie Luckie sagt, technisch kein Unterschied zwischen LAN und WAN ist. Ich werd mal prüfen, ob die Size-Anweisung überhaupt einen korrekten Wert liefert oder ob es da schon hapert. Edit: Eine direkt nach idFTP1.Size... einfügte Messagebox erscheint garnicht erst...seltsam. Gruß Frank |
AW: idFTP: Download funktioniert nur in lokalem Netz
Bei einer aktiven Verbindung, im Gegensatz zu einer passiven, werden die Daten aber auf einem anderen Port übertragen, wenn ich mich da nicht täusche.
|
AW: idFTP: Download funktioniert nur in lokalem Netz
FTP kann man Passiv und Aktiv betreiben.
Beim aktiven Betrieb werden Steuerbefehle über den Port 21 übertragen. Der eigentliche Dateitransfer findet aber über Port 20 statt. Wenn die Firewall den Port 20 blockiert kann genau das beobachte Verhalten eintreten. |
AW: idFTP: Download funktioniert nur in lokalem Netz
Hallo,
versuch mal folgende Einstellung/Erweiterung:
Delphi-Quellcode:
// Verbindung zum Server aufrecht erhalten:
idFTP1.Noop; // Paramter "False" mit angeben: idFTP1.Get('Downloads\' + strProgfile, lStream, False); |
AW: idFTP: Download funktioniert nur in lokalem Netz
Zitat:
Jetzt stellt sich die Frage was bei den Komponenten im Objekinspektor eingestellt ist. Das sieht man ja leider hier nicht. Und da, wie schon gesagt, es keinen technischen unterschied zwischen LAN und WAN gibt, muss irgendwas die Übertragung beeinflussen. Firewall fällt mir bei so was immer als erstes ein. Eventuell ist es auch ein Proxy, falls einer verwendet wird oder der Rechner, über den die Verbindungen nach außen gehen. So genau kenne ich mich mit den Aufbau von Netzwerken nicht aus. Eventuell kann hier noch mal jemand ein paar mögliche Fehlerquellen nennen, der sich mit Netzwerken und deren Aufbau besser auskennt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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