Конференция "Сети" » synapse TFTPSend проблема с ftp.narod.ru [D7, WinXP]
 
  • RGV © (27.03.13 04:36) [0]
    Доброе время суток! Помогите разобраться. Когда соединяюсь с фтп сервером на ftp.narod.ru
    на команду MODE S сервер не отвечает.
    вот лог:
    230 Logged in, proceed
    TYPE I
    200 Type: I
    STRU F
    200 Structure is File
    MODE S
    .... зависон
    на другой фтп сервер ок.

    Хотя через тотже IE на ftp.narod.ru  заходит без проблем.
    Вот код:
    procedure TForm1.Button1Click(Sender: TObject);
    var
     ftp:TFTPSend;
     n:integer;
    begin
     ftp:=TFTPSend.Create;
     ftp.TargetHost:=cb_host.Text;
     ftp.TargetPort:=inttostr(se_port.value);
     ftp.UserName:=cb_log.Text;
     ftp.Password:=e_Pass.Text;
     ftp.OnStatus:=ftpstatus;
     ftp.PassiveMode:=true;
     if ftp.Login and ftp.ChangeToRootDir() and ftp.List('',false) then
     begin
       if (ftp.FtpList<>nil) and (ftp.FtpList.Count>0) then
       begin
          lv.Clear;
          for n:=0 to ftp.FtpList.Count-1 do
           with lv.Items.Add do
           begin
              caption:=ftp.FtpList.Items[n].FileName;
              subitems.Add(inttostr(ftp.FtpList.Items[n].FileSize));
              subitems.Add(ftp.FtpList.Items[n].Permission);
              subitems.Add(DateTimeToStr(ftp.FtpList.Items[n].FileTime));
           end;
       end else
       if (ftp.FullResult<>nil) and (ftp.FullResult.Count>0) then  memo1.Lines.Assign(ftp.FullResult) else   memo1.Lines.Add('list zero');
     end else memo1.Lines.Add('error');
     ftp.Logout;
     ftp.Free;
    end;

    procedure TForm1.ftpstatus(Sender: TObject; Response: Boolean;  const Value: string);
    begin
     memo1.Lines.Add(value);
     application.ProcessMessages;
    end;

  • Сергей М. © (28.03.13 18:00) [1]
    Вот описание протокола:

    http://ru.wikipedia.org/wiki/FTP

    никакой команы "MODE" в нем и в помине нет ..
  • Павиа (29.03.13 15:39) [2]

    > Вот описание протокола:http://ru.wikipedia.org/wiki/FTPникакой
    > команы "MODE" в нем и в помине нет ..

    Это не описание, а пересказ.

    вот это вот описание первой версии
    http://tools.ietf.org/html/rfc959
    и команда mode там есть.
    Правда протокол ftp старый и менялся несколько раз. и некоторые серверы не поддерживают часть команд из-за соображений безопасности.
    А так надо логи смотреть что куда.
  • RGV © (02.04.13 01:48) [3]

    > Правда протокол ftp старый и менялся несколько раз. и некоторые
    > серверы не поддерживают часть команд из-за соображений безопасности.


    Мне кажется, что хотябы из вежливости сервер должен ответить, что данная комманда не поддерживается, ну в крайнем случае разорвать соединение, а получается, что клиент отправил команду и ждет ответа, а ответа нет,  разрыв происходит спустя пару минут :)

    Может подскажете готовый адекватный компонент FTP. Или самому с головой окунаться в http://tools.ietf.org/html/rfc959 ? С Инди мы в контрах.

    А может в TFTPSend где-нибудь есть magic-property из-за которого мне житья нет.

    Я волшебное слово знаю... пожалуйста.
  • clickmaker © (02.04.13 12:33) [4]
    > С Инди мы в контрах

    Вы просто не умеете их готовить.
    На самом деле, никакой чудо-компонент не поможет, если сам сервер эту команду не поддерживает
  • Сергей М. © (04.04.13 22:12) [5]
    Не возражаю если я старый слепой обезьян, но не вижу я ничего и близко напоминающего отправку поманды "MODE" в исходниках IdFTP.pas, к примеру, в 9-й версии (та что под рукой оказалась)
  • clickmaker © (04.04.13 22:36) [6]
    > [5] Сергей М. ©   (04.04.13 22:12)

    Indy 10

    procedure TIdFTP.TransferMode(ATransferMode: TIdFTPTransferMode);
    var
     s: String;
     i : Integer;
     LBuf : String;
    begin
     if (ATransferMode = dmStream) or (ATransferMode = dmDeflate) then begin
       case ATransferMode of
    //      dmBlock: begin
    //        s := 'B';                {do not localize}
    //      end;
    //      dmCompressed: begin
    //        s := 'C';                {do not localize}
    //      end;
         dmStream: begin
           s := 'S';                {do not localize}
         end;
         dmDeflate: begin
           if Assigned(FCompressor) then begin
             //we parse this way because IxExtensionSupported can only work
             //with one word.
             for i := 0 to FCapabilities.Count-1 do begin
               LBuf := Sys.Trim(FCapabilities[i]);
               if LBuf = 'MODE Z' then begin {do not localize}
                 s := 'Z'; {do not localize}
                 Break;
               end;
             end;
             if s <> 'Z' then begin
               Exit;
             end;
           end else begin
             Exit;
           end;
         end;
       end;
       if SendCmd('MODE ' + s) = 200 then begin {do not localize}
         FCurrentTransferMode := ATransferMode;
       end;
     end;
    end;
 
Конференция "Сети" » synapse TFTPSend проблема с ftp.narod.ru [D7, WinXP]
Есть новые Нет новых   [118654   +12][b:0][p:0.001]