C # - проверка FTP / тестовый сервер - PullRequest
4 голосов
/ 03 ноября 2010

Я хочу проверить заданный IP-адрес и данные для входа в систему, чтобы убедиться, что FTP-сервер активен / данные верны. Ничего более.

Я искал в Интернете решение, но ни одно из них не кажется простым / красноречивым, как, например, использование класса Ping для проверки связи и проверки сервера. У меня есть следующее, которое не работает:

    static private void testConntecion()
    {
        FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://172.29.200.158/"));
        requestDir.Credentials = new NetworkCredential("dvm_user", "dvm");

        try
        {
            FtpWebResponse response = (FtpWebResponse)requestDir.GetResponse();
            Console.WriteLine("Cool Beans");
        }

        catch(Exception ex)
        {
            Console.WriteLine(ex);
        }
    }

Я также пробовал:

FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create("ftp://172.29.200.158/");

Сообщение об ошибке: System.Net.WebException: запрошенный URI недопустим для этой команды FTP. в System.Net.FtpWebRequest.GetResponse ()

Заранее спасибо.

Ответы [ 4 ]

5 голосов
/ 03 ноября 2010

Вам необходимо установить метод для запроса ftp:

requestDir.Method = WebRequestMethods.Ftp.ListDirectory;
3 голосов
/ 03 ноября 2010

Вам необходимо указать метод, который вы используете для соединения, их можно найти в пространстве имен WebRequestMethods.Ftp. По умолчанию я полагаю, что вы будете пытаться загрузить файл, а в вашем URI не указан файл для загрузки, следовательно, ошибка неверного URI. Попробуйте поместить тестовый файл в корневой каталог вашего FTP-сайта, возможно, с именем test.txt, а затем измените свой URI на ftp://172.29.200.158/test.txt, после чего следует попытаться загрузить файл.

Важно помнить, что это класс запросов FTP, а не клиент FTP, т. Е. Он выполняет определенные действия, а не открывает канал, позволяющий просматривать, загружать, загружать и т. Д.

1 голос
/ 03 ноября 2010

Почему бы вам просто не обработать исключение в блоке захвата ?:: -).Код ниже будет правильно определять, работает ли FTP или нет.Он опирается на метод веб-запроса «ListDirectoryDetails», который должен быть быстрым и не требовать большой полосы пропускания (обычно :: - D, то есть, если вы не опрашиваете FTP по 15k файлов).

Переменные:_URL, _User, _Pass, _PassiveMode (вы можете попробовать проверить оба режима).

  FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(_URL);
  FtpWebResponse res;
  StreamReader reader;

  ftp.Credentials = new NetworkCredential(_User, _Pass);
  ftp.KeepAlive = false;
  ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
  ftp.UsePassive = _PassiveMode;

  try
  {
    using (res = (FtpWebResponse)ftp.GetResponse())
    {
      reader = new StreamReader(res.GetResponseStream());
    }
  }
  catch
  {
    //Handling code here.
  }

Я забыл, что именно является ошибкой для "мертвого" FTP, но не сложно просто поставить точку останова вчто поймать, посмотреть, что такое исключение и обработать его :: -).

Просто добавьте все это в функцию с 4 параметрами или, возможно, с 3, и вы попробуете как пассивный, так и активный изнутри.Функция будет возвращать логическое значение, независимо от того, работает ли FTP.Когда вы запрашиваете список файлов, вы тратите немного времени, но это необходимо, только если вы слишком тщательны.Вы можете удалить «читателя», а также поток ответов, который я думаю :: -).

Надеюсь, это поможет :: -).

0 голосов
/ 03 ноября 2010

Я думаю, что сначала вы должны установить requestDir.Method для какой-либо команды ftp, прежде чем выполнять GetResponse ().См. WebRequestMethods.Ftp для возможных команд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...