На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Работа с FTP
    Есть программа которая закачивает фаил на ФТП посредством WebClient!(мой выбор пал на WebClient потому, что он умеет работать с ФТП в асинхроном режиме что не маловажно, т.к. отпадает многострочность и сложность кода который наблюдается у Сокетов или WebRequest в асинхронных режимах или в потоках)!
    И так, к делу.!
    Я отлавливаю ответ который посылает сервер.

    ExpandedWrap disabled
       Private Sub webClient_UpLoadFileCompleted( _
                ByVal sender As System.Object, _
                ByVal e As System.Net.UploadFileCompletedEventArgs) _
                Handles WebClient.UploadFileCompleted
       
      msgbox(e.Error.Message.ToString) ' это сообщение которое приходит от сервера в случае ошибки.
      errorAgent(e.Error.Message.ToString) ' sub
        
       End Sub


    В errorAgent я обрезаю получившийся результат(текст) до кода ошибки, в данном случае 530,
    В rfc я вычетал что такому коду ошибке соответствует "Неправельный Логин или Пароль",
    и в лист виев на нашем могучем пишу : "Неправельный Логин или Пароль"
    а коду 421 соответствует "Превышенно максимальное количество людей на сервере"

    Сама проблема!!!
    Когда начал тестить программу заметил, что выдается постояно "Неправельный Логин или Пароль" вместо
    "Превышенно максимальное количество людей на сервере"
    Начал уходить в глубь проблеммы и был удевлен! :o

    Что код при превышении максимал...... людей не 421 а 530
    Просто у него окончание другое


    Вижу
    Цитата

    The remote server returned an error: (530) Sorry, max 41 users -- try again later ---- -- Уточню что это я вижу в DownloadMaster

    Но по идее толжен быть у 530 ошибки
    Цитата

    The remote server returned an error: (530) Non, logen in

    а у 421
    Цитата

    The remote server returned an error: (421) Service not available, closing control connection.



    Все бы не чего, переделал код с 421 на 530, да вот мой WebClient не хочит видеть именно тот конец который на самом деле!!! :blink:

    Допустим происходит ошибка в логе пишется что:

    (530) Non, logen in --- (Моя программа)


    А на самом деле
    (530) Sorry, max 41 users -- try again later --- (DownLoadMaster)

    Почемуто не хочет WebClient выводить такое сообщение.



    Кто знает причину такого ответа!

    Добавлено
    Проблема перешла на новый уровень. Просто пока писал эксперементировал и заметил не маловажний факт!!!

    Запускаю FTP сервер у себя на компьютере (для теста)
    Запускаю командную строку, подключаюсь к фтп
    На ФТП заранее включено MaxUsers = 1
    Запускаю свою программу наченаю закачку файлов
    В Логе сервера видно
    Цитата

    421 Too many users are connected, please try again later

    А моя программа выдает! :wall:
    Цитата

    (421) Service not available, closing control connection.


    >:( Что за катострофа такая Сокет нормально сообщение передоет а Web client нет!
    Сообщение отредактировано: Gradar -
      Насколько я понял. Тебе нужно, чтобы прога нормально подключалась к серверу и закачивала файл на него.
      Ниже приведен код функции закачки (под 2й фрэймворк). Надеюсь, он будет тебе полезен.
      ExpandedWrap disabled
                /// <summary>
                /// Функция для аплоада файла
                /// </summary>
                /// <param name="fileName">имя файла, который будем аплоадить</param>
                /// <param name="uploadUrl">урл аплоада</param>
                public void Upload(string fileName, string uploadUrl)
                {
                    Stream requestStream = null;
                    FileStream fileStream = null;
                    FtpWebResponse uploadResponse = null;
                    try
                    {
                        FtpWebRequest uploadRequest =
                            (FtpWebRequest)WebRequest.Create(uploadUrl);
                        uploadRequest.UsePassive = Form1.FtpOption;
                        //вбиваем кредентиалы
                        uploadRequest.Credentials = new NetworkCredential(Form1.FtpUserName, Form1.FtpPassword);
                        uploadRequest.Method = WebRequestMethods.Ftp.UploadFile;
                        uploadRequest.Proxy = null;
                        requestStream = uploadRequest.GetRequestStream();
                        fileStream = File.Open(fileName, FileMode.Open);
         
                        byte[] buffer = new byte[1024];
                        int bytesRead;
                        while (true)
                        {
                            bytesRead = fileStream.Read(buffer, 0, buffer.Length);
                            if (bytesRead == 0)
                                break;
                            requestStream.Write(buffer, 0, bytesRead);
                        }
                        requestStream.Close();
         
                        uploadResponse =
                            (FtpWebResponse)uploadRequest.GetResponse();
                    }
                    catch
                    {
                    }
                    finally
                    {
                        if (uploadResponse != null)
                            uploadResponse.Close();
                        if (fileStream != null)
                            fileStream.Close();
                        if (requestStream != null)
                            requestStream.Close();
                    }
                }
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0198 ]   [ 17 queries used ]   [ Generated: 28.03.24, 10:22 GMT ]