AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi idFTP: Download funktioniert nur in lokalem Netz
Thema durchsuchen
Ansicht
Themen-Optionen

idFTP: Download funktioniert nur in lokalem Netz

Ein Thema von FBrust · begonnen am 22. Feb 2011 · letzter Beitrag vom 23. Feb 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#1

idFTP: Download funktioniert nur in lokalem Netz

  Alt 22. Feb 2011, 12:29
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:
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;
Wie gesagt, im lokalen Netzt läuft alles prima. Die Ordnerstruktur ist auch identisch, d. h. die Quell- und Zielordner sind beide vorhanden.

Hat vielleicht jemand einen Tip?

Gruß
Frank
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty

Geändert von FBrust (22. Feb 2011 um 12:52 Uhr) Grund: Code ergänzt
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#2

AW: idFTP: Download funktioniert nur in lokalem Netz

  Alt 22. Feb 2011, 12:37
Dreh doch mal das
lStream.Free; und das
idFTP1.Disconnect; um, vielleicht hilft das !
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: idFTP: Download funktioniert nur in lokalem Netz

  Alt 22. Feb 2011, 12:49
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
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty

Geändert von FBrust (22. Feb 2011 um 12:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: idFTP: Download funktioniert nur in lokalem Netz

  Alt 22. Feb 2011, 12:54
Technisch gesehen gibt es zwischen LAN und WAN keinen Unterschied. Kann es sein, dass eventuell die Firewall dazwischen funkt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#5

AW: idFTP: Download funktioniert nur in lokalem Netz

  Alt 22. Feb 2011, 12:55
Musst du da nicht auch mit OnAfterGet bzw OnStatus arbeiten ? (siehe idFTP.Get Hilfe)

Indy ist doch m.E. Threaded aufgebaut, oder ?
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: idFTP: Download funktioniert nur in lokalem Netz

  Alt 22. Feb 2011, 13:03
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
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty

Geändert von FBrust (22. Feb 2011 um 13:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: idFTP: Download funktioniert nur in lokalem Netz

  Alt 22. Feb 2011, 13:05
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

AW: idFTP: Download funktioniert nur in lokalem Netz

  Alt 22. Feb 2011, 13:08
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.
Andreas
  Mit Zitat antworten Zitat
GHorn

Registriert seit: 24. Mär 2009
Ort: NRW
124 Beiträge
 
#9

AW: idFTP: Download funktioniert nur in lokalem Netz

  Alt 22. Feb 2011, 13:26
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);
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: idFTP: Download funktioniert nur in lokalem Netz

  Alt 22. Feb 2011, 14:23
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.
Danke für die weitergehende Erläuterung.

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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz