idFTP wysyła puste pliki (gryzie się z TEasyGG)

0

Witam zrobiłem prosty program wysyłający lub pobierający pliki do/z serwera. Program działa bez zarzutu.
Kiedy zrobiłem to samo w drugim programie który zawiera oprócz komponentu idFTP TEasy GG, ten drugi działa bez problemu, natomiast FTP wysyła pliki jak również pobiera, ale nie zajmują one miejsca (0kb). Po chwili pojawia się błąd że nie może zbudować połączenia, limit czasu upłynął ;/

Jakieś pomysły?
Pomóżcie proszę...

0

Pokaż kod przede wszystkim. I coś mi połączenie komponentów IdFtp z EasyGG w jednym "pachnie" malwar'em. A jak nie radzisz sobie z Indy to spróbuj to samo napisać z użyciem Synapse. Ale nie namawiam, rob jak uważasz. Ale nie wiem dlaczego Indy miało by się gryźć z EasyGG, to osobne komponenty, moduły i oba wprawdzie korzystają z Socketów, ale nie powinny sobie przeszkadzać. Jednak wiadomo Indy już nie jest za bardzo rozwijane, a wersje zarówno 9 jak i 10 zawierają o ile wiem sporo nienaprawionych jeszcze błędów.

0
function FileFTP(FileName, Login, Haslo, Host: String; Port: Integer; Pobierz: Boolean): String;
var FTP: TidFTP;
begin FTP:=TidFTP.Create(nil);
try result:='Błąd podczas łączenia z: '+Host+': '+IntToStr(Port);
FTP.Host:=Host; FTP.Port:=Port;
FTP.Username:=Login; FTP.Password:=Haslo;
FTP.Connect; if FTP.Connected then Result:='Prawidłowo połączono z: '+Host+': '+IntToStr(Port);
if FTP.Connected then if not Pobierz then FTP.Put(FileName, ExtractFileName(FileName)) else
FTP.Get(ExtractFileName(FileName), FileName);
finally FTP.Disconnect; end;
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
if Memo1.Lines.Strings[0]=('ftp') then begin
FileFTP('lol.txt','login','haslo','host',21,false);
end;
end;

Memo1 pobiera treść wiadomości gg, jak jest równe 'ftp' to wysyła plik lol.txt na serwer.
Program faktycznie ma charakter malware, ale używam go tylko do zdalnego sterowanie własnym komputerem ;)

0

Że nie mogłem patrzeć na ten kod - sformatowałem go:

Function FileFTP(FileName, Login, Haslo, Host: String; Port: Integer; Pobierz: Boolean): String;
Var FTP: TIdFTP;
Begin
 FTP := TIdFTP.Create(Nil);
 Try
  Result       := 'Błąd podczas łączenia z '+Host+': '+IntToStr(Port);
  FTP.Host     := Host;
  FTP.Port     := Port;
  FTP.Username := Login;
  FTP.Password := Haslo;
  FTP.Connect;
  if FTP.Connected Then
   Result := 'Prawidłowo połączono z '+Host+': '+IntToStr(Port); 
  if FTP.Connected Then
   if Not Pobierz Then
    FTP.Put(FileName, ExtractFileName(FileName)) Else
    FTP.Get(ExtractFileName(FileName), FileName);
 Finally
  FTP.Disconnect;
 End;
End;
 
Procedure TForm1.Memo1Change(Sender: TObject);
Begin
 if Memo1.Lines.Strings[0] = 'ftp' Then
  FileFTP('lol.txt', 'login', 'haslo', 'host', 21, False);
End;
0

Dobra wiem, że tak się powinno pisać programy. Bardziej przejrzyście jest wtedy, ale problem jak miałem, tak mam ;/

Już sobie poradziłem ;) Musiałem włączyć tryb passive.

0

ja Ci powiem, że idftp (wgl FTP) jest zawodny, do przesyłania plików lepiej użyc idhttp i najprostszego skryptu do uploadowania na serwerze (php)
Jak byś się postarał to nawet da się wznawiać uploadowanie, bo to kiedyś robilem

0

Jeżeli zrobiłeś dokładnie tak:

 FileFTP('lol.txt','login','haslo','host',21,false); 

to błąd bo musisz podać dokładną ścierze do pliku a nie samą nazwę...

1 użytkowników online, w tym zalogowanych: 0, gości: 1