2015-05-25 2 views
0

я пытался получить файл с FTP-сервера, но каждый раз попробовать подключиться, используя мой код я получил ту же ошибку:idFTP + Время ожидания соединения

EIdSocketError: Socket Error # 10060 подключения время вышло.

с помощью Filezilla 3.4, можно подключить и загрузить файлы, мой код:

var 
    objFTP: TidFTP; 
begin 
    try 
    objFTP := TIdFTP.Create; 
    try 
     objFTP.Disconnect; 
     objFTP.Host := '200.1.81.252'; 
     objFTP.Port := 990; 
     objFTP.Username := 'user_name'; 
     objFTP.Password := 'user_pass'; 
     objFTP.Passive := True; 
     objFTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(objFTP); 
     objFTP.UseTLS := utUseRequireTLS; 
     objFTP.TransferTimeout := 120000; 
     try 
     objFTP.Connect; 
     objFTP.ChangeDir('/salida/acciones/2015-05-20'); 
     objFTP.Get('SW052015.003', 'C:\SW052015.txt'); 
     finally 
     objFTP.Disconnect; 
     end; 
    finally 
     FreeAndNil(objFTP); 
    end; 
    except 
    on E: Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 

какие-либо предложения?

конфигурации на FileZilla:

Authentication порт: порт передачи 990

данных: 9080 (не знаю, что это такое)

Шифрование: Требуется явный FTP через TLS

Passive режим

Force UTF-8

+1

Вы проверили настройки брандмауэра? Тот факт, что FileZilla разрешено выполнять сетевую связь, не означает, что вашему приложению также разрешено выполнять сетевую связь. Многие брандмауэры допускают конфигурацию каждого приложения. – SilverWarior

+0

Я не могу видеть правила брандмауэра (правила компании), но используя команду telnet 200.1.81.252 990 на cmd, я подключился к серверу. – GPGomes

+1

Какая строка действительно создает исключение? Вызов 'Connect()', 'ChangeDir()' или 'Get()'? Это имеет большое значение. Кроме того, вы не должны вызывать 'Disconnect()', если 'Connect()' не удается в первую очередь. Кроме того, попробуйте использовать 'utUseExplicitTLS' вместо' utUseRequireTLS'. Также, если серверу требуется шифрование при передаче данных, вам необходимо установить свойство 'TIdFTP.DataPortProtection'' ftpdpsPrivate' (по умолчанию это 'ftpdpsClear' - без шифрования). –

ответ

0

Благодаря комментариям, у меня есть код, который отлично работает:

var 
    objFTP: TidFTP; 
    sCaminho: String; 
begin 
    sCaminho := 'C:\SW052015.txt'; 
    SysUtils.DeleteFile(sCaminho); 
    try 
    objFTP := TIdFTP.Create; 
    try 
     objFTP.Host := '200.1.81.252'; 
     objFTP.Username := 'user_name'; 
     objFTP.Password := 'user_pass'; 
     objFTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(objFTP); 
     objFTP.UseTLS := utUseExplicitTLS; 
     objFTP.DataPortProtection := ftpdpsPrivate; 
     try 
     objFTP.Port := 990; 
     objFTP.Passive := True; 
     objFTP.Connect; 
     objFTP.ChangeDir('/salida/acciones/2015-05-20'); 
     objFTP.Get('SW052015.003', sCaminho); 
     finally 
     objFTP.Disconnect; 
     end; 
    finally 
     FreeAndNil(objFTP); 
    end; 
    except 
    on E: Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 
end.