[fpc-pascal] Getting strange FTP error using Indy 10 idFTP

Bo Berglund bo.berglund at gmail.com
Wed Nov 22 20:50:19 CET 2017


I am writing a simple Delphi7/FPC compatible console application in
order to use in a daily task to transfer a backup zipfile from a
server to my Windows 7 laptop. The task is a bat script that does a
lot of other stuff as well as the FTP and it has been a struggle
setting ftp up for batch file operation so I decided to write this
console app to better integrate into the bat file.

To this end I have  the following code (only showing the relevant
stuff:

uses
  SysUtils,
  Classes,
  IdFTP,
  IdComponent,
  IniFiles;

var
  FTP: TIdFTP;
  FTPHost,
  FTPUser,
  FTPPwd: string;
  FTPPort: word;
  FList: TStringList;
...

function ConnectFTP: boolean;
begin
  Result := false;
  try
    if FTP.Connected then
    begin
      LogMessage('Already connected to ' + FTPHost);
      Result := true;
      exit;
    end;

    FTP.Host := FTPHost;  //remote server by computer name
    FTP.Port := FTPPort;  //remote port is 2121
    FTP.Username := FTPUser;  //Windows username
    FTP.Password := FTPPwd;   //Windows password

    FTP.Connect;

    if not FTP.Connected then
    begin
      LogError('Could not connect by FTP');
    end
    else
      LogMessage('Connected to ' + FTPHost);
    Result := FTP.Connected;
  except
    on E: Exception do
      LogException(E.Message);
  end;
end;

procedure ListFiles(var Lst: TStringList);
{Get a directory listing of remote ftp server's current dir}
var
  Res: string;
begin
  if not FTP.Connected then
    ConnectFTP;
  if not FTP.Connected then
    exit;
  try
    FTP.List(Res); // <== EXCEPTION HERE!
    Lst.Text := Res;
    LogMessage(Lst.Text);
  except
    on E: Exception do
      LogException(E.Message);
  end;
end;

....

begin
  FTP := TIdFTP.Create;
  FList := TStringList.Create;
  try
    GetConfig; //Retrieve configuration from ini file
    LogMessage('Starting FTP transfer from ' + FTPHost);
    if not ConnectFTP then
    begin
      LogError('Could not connect to ' + FTPHost + ' on port ' +
IntToStr(FTPPort));
      ExitCode := 1;
      Exit;
    end;
  //Now read directory on target
  ListFiles(FList);
.... more code here ....
  LogMessage('Finished transfer');
  finally
    FList.Free;
    if FTP.Connected then
      FTP.Disconnect;
    FTP.Free;
  end;
end.

What I get is an exception in my logfile saying: 

20:14:01.018 EXCEPTION: Invalid PORT Command.

I have tried to trace it into the Indy sources but I get lost there
and as soon as I release the execution I have the exception trigger.

The FTP server is on a Windows Server 2003 and it works OK using
FileZilla and the Windows built-in FTP client as well as a FTP testing
utility I have build years ago.
>From this utility I have basically cut the code shown above and yet I
get the error when trying FTP.List()...

Normally when dealing with Indy errors I post on the Embarcadero Forum
Delphi.Internet.Winsock using a newsreader. THen I usually get replies
from Remy Lebeau.
But now it seems like the Embarcadero servers have crashed again so
the forums are down.
Hence I am hoping for some help here...


-- 
Bo Berglund
Developer in Sweden




More information about the fpc-pascal mailing list