FTP Verbindung herstellen

  • Hallo Andy,

    daß das Script funktioniert glaube ich schon.

    Aber leider funktioniert der Zugriff auf meinen FTP-Server nicht wenn ich die IP, Benutzername und Passwort von meinem
    FTP-Server angebe.

    Ich denke die Wartezeit, bis eine Fehlermeldung kommt müsste einfach länger sein. Eine Antwort von meinem FTP-Server
    lässt leider 60 Sekunden auf sich warten.

    Lg

  • Hi,
    erstelle einen "öffentlichen" Ordner auf deinem FTP-Server mit Benutzerrechten, die nur für diesen Ordner gelten (Nur Dateien runterladen, keine Hochladen, sonst keine Rechte!)
    Kopiere eine Dummy-Textdatei rein und sende mal die Zugangsdaten per PN, ich schaue mir das mal an, wenn du willst...

    FTP ist eigentlich völlig problemfrei, habe da seit Jahren keinerlei Stress.

  • Hallo an alle.

    Bin dem Problem etwas näher gekommen (hoffe ich).

    Habe unter der _FTP_Connect Anweisung eine MsgBox eingefügt.

    Es wird nun probiert die Datei herunterzuladen wird dann aber leider mit der Fehlermeldung abgebrochen:

    Fehler bei _FTP_ProgressDownload: -3>Exit code: 0 Time: 48

    @error = -3 - Quelldatei konnte nicht geöffnet werden

    Kann sich mein Script mal jemand ansehen?

    Durch die MsgBox die ich eingefügt habe bekomme ich so wie es aussieht Verbindung zum Server.

    Lg


    Spoiler anzeigen
    • Offizieller Beitrag

    Hallo,

    lass mich mal raten, du hast die Änderungen an der FTPEx.au3 nicht wieder rückgängig gemacht oder. Deshalb wird nämlich UNKNOWN status = 40 ausgegeben. Die Werte die du geändert hast habe nichts mit Timeouts zu tun, das sind einfach nur die Statuscodes.

  • Hier noch ein leicht abgewandeltes Script...

    FTP-ProgressDownload - 2 Demos
    • Offizieller Beitrag

    Kann sich mein Script mal jemand ansehen?

    In dieser Zeile fehlt ein Backslash:

    AutoIt
    _FTP_ProgressDownload($l_FTPSession, @ScriptDir & "Drucken.txt", "\var\usbstick\Drucken.txt", "_UpdateProgress")


    das müsste so aussehen:

    AutoIt
    _FTP_ProgressDownload($l_FTPSession, @ScriptDir & "\Drucken.txt", "\var\usbstick\Drucken.txt", "_UpdateProgress")
  • Hallo Bitnugger,

    die Datei wird jetzt heruntergeladen. Leider ist sie leer.

    Gibt wohl noch ein Problem beim öffnen der Datei. (sehe ich das richtig?)

    Nach dem Start wird die Datei aus dem Lokalen Verzeichnis gelöscht und steht am Ende
    wieder drin. Leider ohne Daten.

    Lg


    Spoiler anzeigen


    AutoIt: 3.3.12.0, OS: WIN_7/SP1/X86, OSLang: 0407, CPUArch: X64, Script: D:\AutoIt\Programme\Fehlersuche\FTP_Fehlersuche_2.au3
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    alte Datei gelöscht...
    OK: _FTP_Open() --> 0x00CC0004
    Handle created
    Resolving name ...
    Name resolved
    Connecting to server ...
    Connected to server
    Receiving response ...
    Handle closing ...
    Error: _FTP_Connect()
    $hFTPSession = 0x00CC0004
    $hFTPConnect = 0
    $sServerName = 192.168.0.111
    $sUsername =XXXXXX
    $sPassword = XXXXXX
    $iPassive = 1
    _FTP_GetLastResponseInfo = 1
    @error = 0
    @extended = 0
    OK: _FTP_Connect() --> 0
    Error: _FTP_ProgressDownload()
    $hFTPSession = 0x00CC0004
    $hFTPConnect = 0
    $sLocalFile = C:\Users\XXXXXXX\AppData\Local\Temp\Drucken.txt
    $sRemoteFile = /var/usbstick/Drucken.txt
    $sError = Open RemoteFile failed
    _FTP_GetLastResponseInfo = 1
    @error = 0
    @extended = 6
    OK: _FTP_ProgressDownload() - Download complete
    From: /var/usbstick/Drucken.txt
    To: C:\Users\XXXXXX\AppData\Local\Temp\Drucken.txt
    >>>>>> Please close the "Report Log Window" to exit <<<<<<<

  • Schalte bitte mal deine Firewall aus und probiere es noch einmal.

    Bei manchen Firewall-Konfigurationen sind eingehende Verbindungen gesperrt. Das kann den beschriebenen Effekt haben.

    Grüße autoiter

  • Naja es ist eigentlich klar, es liegt an deinem Server. Der ist (vor allem bei der Startmeldung) sehr langsam.
    Wenn wir einen Timeout verändern könnten, was durchaus eigentlich möglich sein sollte, dann würde es funktionieren.
    Das problem ist wir können es nur schwer testen, da wir ja keinen zugriff auf den server haben...

  • Kann es sein, dass Dakumente die auf dem Server 'nicht existieren' trotzdem heruntergeladen werden und dann leer sind.
    Oder der download ist durch andere Probleme fehlerhaft.

  • Leider weiß ich nicht genau wie diese Fehlermeldung zustande kommt


    $sError = Open RemoteFile failed
    _FTP_GetLastResponseInfo = 1
    @error = 0
    @extended = 6

    oder was da genau angemeckert wird

  • Das ist keine eingehende Verbindung - sein FTP-Server ist im LAN!

    Hm, du bist aber eine harte Nuss... lol

    Irgendwas machst du da falsch...
    Error: _FTP_Connect()

    Du bekommst ja nicht mal einen Connect hin... der Rest ist dann zwangsweise auch nicht erfolgreich.

    Da KEINE Verbindung zum Server hegestellt werden konnte, wurde somit ergo auch KEINE Datei heruntergeladen, sondern lediglich eine Datei zur Vorbereitung des Downloads von _FTP_ProgressDownload() lokal auf deinem PC geöffnet...

    AutoIt
    Local $hFile = FileOpen($s_LocalFile, $FO_OVERWRITE + $FO_BINARY)


    ...was die Ursache dafür ist, dass im Fehlerfall nach Beenden des Programms eine leere Datei zurückbleibt. Die Datei kann man dann natürlich getrost löschen... aber weitaus intelligenter ist es, solche Fehler von vornherein zu vermeiden, indem erst eine Verzeichnisliste vom Server geholt wird, um sie dann mit _ArraySearch() zu durchsuchen, bevor ein File gedownloadet werden soll, dass es gar nicht gibt. Wurde der Dateiname im Array mit "no case sensitive" gefunden, kann man den Dateiname aus dem Array verwenden, um den Download zu starten, ohne weiter über die richtige Schreibweise (klein GROSS oder mIxEd???) nachdenken zu müssen.

    AutoIt
    ...
    Local $aRemoteFiles = _FTP_ListToArray($hFTPSession, 0)
    If $aRemoteFiles[0] = 0 Then _Error() ; Abbruch, Exit oder Bier holen... ;-)
    If _ArraySearch($aRemoteFiles, $sLocalFileName, 1, 0, 0, 1) Then _Download($aRemoteFiles[0], $sLocalPath)
    ...


    Natürlich gibt es noch zig andere Ursachen, warum ein Download nicht klappt... z. B. wegen fehlender Berechtigungen... 'jens' meldet sich am Server an und will eine Datei downloaden, doch die gehört leider dem User 'root'. ||

    Nun habe ich ein weiteres Test-Programm für dich erstellt... ein etwas ausgefeilteres... ist aber noch nicht ganz fertig. <X

    Darin setze ich vorab dann auch den Maximalwert für 'CONNECT_TIMEOUT' & 'RECEIVE_TIMEOUT' - der Wert für CONNECT und RECEIVE und auch die Anzahl der Verbindungsversuche ist natürlich einstellbar, ebenso die Pause(n) dazwischen, wobei aber klar sein sollte, dass veränderte TIMEOUT-Werte keine Auswirkungen auf das Verhalten des Servers haben... was u. A. auch an den extremen Zeitunterschieden bis zum Erscheinen einer Fehlermeldung erkennbar ist, je nachdem, welcher Server gerade mit im Spiel ist. Bei einem im LAN installierten FTP-Server kam die Rückmeldung so schnell, dass ich nicht einmal genügend Zeit hatte, meinen Stinkefinger von der F5-Taste zu nehmen. 8)

    So gesehen bedeutet dies im positiven Sinne aber auch, dass der Server bereit ist und auf Anfragen reagiert... falls nicht, dann liegt oder sitzt der Fehler eindeutig auf der Seite des Clients - ca. 20 - 60 cm vor dem Monitor.

    Es werden noch etliche andere Dinge überprüft... z. B. ob der $sServername (Name oder IP) korrekt angegeben wurden und ob auf ein Ping geantwortet wird.

    Desweiteren habe ich in der FTPEx.au3 ein paar sehr markante und interessante Stellen gefunden, die mir aufgezeigt haben, dass ich die Fehlerbehandlung in meinem neuen Script noch wesentlich verbessern kann - das will ich erst noch alles checken... und dank BugFix habe ich jetzt so allmählich auch den Durchblick mit DllCall's.

    Ich werde schätzungweise Morgen im Laufe des Tages damit fertig sein... mal schauen... ich schiebe es hoch, sobald es fertig ist.


    Poste dann anschließend die Ausgabe von Debug() wieder hier... aber bitte setze sie in einen Spoiler!

    Nachtrag: Hast du denn mit FileZilla und/oder Co. eine Verbindung herstellen können?

    2 Mal editiert, zuletzt von Bitnugger (16. Juni 2015 um 21:00)