Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

FTP сервер возвращает ошибку 227

#c_sharp #ftp


Доброго времени суток. Собственно, сабж в титле.

Сама ошибка выглядит по меньшей мере непонятно:


  "Удаленный сервер возвратил ошибку: 227 Entering Passive Mode
  (192,168,1,136,39,43)"


при чём тут ошибка? мне же и нужно в пассивный режим зайти... ладно, едем дальше.

Опыта работы с ftp нет, нашел какие то исходники, собрал проект, выдаётся вышеупомянутое
исключение. Упростил код до невозможности, ошибка осталась. Странность ещё в том, что
в totalCommander соединение удаётся,

    private void btn_connect_Click_2(object sender, RoutedEventArgs e)
    {
        FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create("ftp://192.168.1.136/");
        requestDir.Credentials = new NetworkCredential("username", "password");
        requestDir.Method = "LIST";
        requestDir.UseBinary = true;
        requestDir.EnableSsl = false;
        requestDir.UsePassive = true;

        try
        {
            WebResponse response = requestDir.GetResponse();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString() + ": \n" + ex.Message);
        }
    }


пробовал так же ставить 


  requestDir.UsePassive = false;


Получил ошибку 500, синтаксическую, мол, команда не опознана.
Буду благодарен, если мне объяснят, что я делаю не так)
    


Ответы

Ответ 1



Задайте requestDir.UsePassive = false; Далее, в чем возможно заключается сама ошибка и почему сервер возвращает ошибку 500. Дело в том что Вы задали команду вывода списка файлов: requestDir.Method = "LIST"; Попробуйте сначала вывести список директорий: requestDir.Method = WebRequestMethods.Ftp.ListDirectory; или так: requestDir.Method = "NLST"; Список предустановленных команд FTP в .NET: https://msdn.microsoft.com/ru-ru/library/system.net.webrequestmethods.ftp(v=vs.110).aspx

Ответ 2



Без костылей решить не удалось. Банально скачал левую dll для работы с FTP (сам тут человек новый, так что ссыль на Cyberforum, где первоначально задавал вопрос, как залить архив - не увидел))). Далее работал так: FTP _ftp; private void btn_Connect_click(object sender, RoutedEventArgs e) { _ftp = new FTP(); _ftp.TransferCompleteEvent += new FTP.TransferCompleteEventHandler(ftp_TransferCompleted); _ftp.HostAddress = "192.168.1.136"; _ftp.UserName = "username"; _ftp.Password = "password"; _ftp.Port = 21; _ftp.UseBinary = true; _ftp.OverwriteFiles = true; _ftp.OverwriteReadOnlyFiles = false; _ftp.EnableSSL = false; _ftp.UsePassive = true; _ftp.Connect(); string localPath = new FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName; _ftp.CurrentDirectory = @""; _ftp.DownloadDirectoryAsync(localPath, @"datalog"); } private void ftp_TransferCompleted(Object sender, TransferCompletedEventArgs e) { _ftp.Disconnect(); //... }

Комментариев нет:

Отправить комментарий