Moin moin,
mich plagen gerade zwei Probleme. Und zwar habe ich ein Programm geschrieben das FXP Transfers via Thread erledigt/erledigen soll.
Soo Problem eins:
Wenn ich einen Transfer anschiebe so wird dieser manachmal nach einer Minute abgebrochem beide senden ohne Grund einen QUIT Befehl aus.
Hier die Logausschnitte aus Quellserver:
Quelltext
1: 2: 3: 4: 5:
| Sent 12.11.2010 12:55:14: PASV<EOL> Recv 12.11.2010 12:55:14: 227 Entering Passive Mode (172,20,64,37,118,239)<EOL> Sent 12.11.2010 12:55:14: RETR E01105.mxf<EOL> Recv 12.11.2010 12:55:14: 150 Opening BINARY mode data connection for E01105.mxf (2979111936 bytes).<EOL> Sent 12.11.2010 12:56:14: QUIT<EOL> |
und der aus dem Zielserver:
Quelltext
1: 2: 3: 4: 5: 6:
| Sent 12.11.2010 12:55:14: PORT 172,20,64,37,118,239<EOL> Recv 12.11.2010 12:55:14: 200 PORT command successful<EOL> Sent 12.11.2010 12:55:14: STOR E01105.mxf<EOL> Recv 12.11.2010 12:55:14: 150 Opening data connection.<EOL> Sent 12.11.2010 12:56:14: QUIT<EOL> Recv 12.11.2010 12:56:14: 221 Be seeing you.<EOL> |
Wenn ich nun aber ein anderes File nehme, so kann es sein, das der Transfer ordnungsgemäß durchgeführt wird oder aber wie oben halt wieder fehlschlägt.
Kennt da jemand eine Lösung oder das Problem?
Problem nummer 2 ist:
Ich bekomme egal wie der Transfer ausgeht immer die Meldung Dateiupload fehlgeschlagen wieder! Auch wenn das File ordnungsgemäß und vollständig übertragen wird (auch der FTP Server stimmt mir zu das das File richitg und vollständig angekommen ist).
Für den Thread habe ich folgenden Code als Vorlage verwendet und nur angepasst da ich ja direkt FXP Transfers mache und entsprechend kein Lokales Verzeichnis etc habe.
www.delphipraxis.net...indy-als-thread.html
Kennt auch da jemand des Rätsels Läsung?
Hier der Code des Transfers im Ausschnitt:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| Semaphore.Acquire;
for cnt := 0 to FileList.Count - 1 do if (not Self.Terminated) then begin WriteLog(2,'Starte Upload'); Inc(IFileCnt); IState := ftpUPLOADING;
WriteLog(1,'Wechsel in das Quellverzeichnis ' + Config.ArbeitsVerzeichnis_Quelle); FTP_Quelle.changedir(Config.Arbeitsverzeichnis_Quelle); FTP_Quelle.sendcmd('PASV');
port := ''; port := Copy(Trim(FTP_Quelle.lastcmdresult.text.Text), 24, MaxInt); Delete(port,length(port),2); FTP_Ziel.sendcmd('PORT ' + port); WriteLogTransfer(8,'Beginne Transfer von "' + Filelist[cnt] + '" nach ' + Config.Hauptverzeichnis_Ziel + Config.Arbeitsverzeichnis_Ziel); FTP_Ziel.sendcmd('STOR ' + Filelist[cnt]); FTP_Quelle.sendcmd('RETR ' + Filelist[cnt]);
FTP_Ziel.GetResponse([110, 125, 150]); FTP_Quelle.GetResponse([110, 125, 150]); FTP_Ziel.GetResponse([225, 226, 250]); FTP_Quelle.GetResponse([225, 226, 250]);
WriteLog(2,'Transfer von "' + Filelist[cnt] + '" abgeschlossen');
end;
IState := ftpREADY; WriteLogTransfer(9,'Transfer von "' + Filelist[cnt] + '" nach ' + Config.Hauptverzeichnis_Ziel + Config.Arbeitsverzeichnis_Ziel + ' erfolgreich abgeschlossen'); WriteLogTransfer(9,'TEST'); Filelist.Clear; finally FTP_Quelle.Disconnect; FTP_Ziel.Disconnect; Semaphore.Release; Self.HasJob := False; Self.Suspend; end; |
Besten Dank und viele Grüße!