C# - FTP检查/测试服务器

时间:2010-11-03 12:37:22

标签: c# ftp

我想测试给定的IP和登录详细信息,以查看FTP服务器是否处于活动状态/详细信息是否正确。而已。

我在网上寻找解决方案,但似乎没有简单/雄辩,例如,使用Ping类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 个答案:

答案 0 :(得分:5)

您需要在ftp请求上设置方法:

requestDir.Method = WebRequestMethods.Ftp.ListDirectory;

答案 1 :(得分:3)

您需要指定用于连接的方法,这些方法可以在WebRequestMethods.Ftp命名空间中找到。默认情况下,我相信您将尝试下载文件,并且您的URI未指定要下载的文件,因此无效的URI错误。尝试将测试文件放在FTP站点的根目录中,可能称为test.txt,然后将URI修改为ftp://172.29.200.158/test.txt,然后尝试下载该文件。

重要的是要记住,这是一个FTP请求类而不是FTP客户端,即它执行特定的操作,而不是打开一个允许您浏览,上传,下载等的频道。

答案 2 :(得分:1)

为什么不简单地在 catch块中处理异常? :: - )。下面的代码将正确确定FTP是否正常工作。它依赖于“ListDirectoryDe​​tails”Web请求方法,该方法应该很快并且不需要大量带宽(通常为:: - D,即除非您轮询15k文件FTP)。

变量:_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,你可以尝试使用Passive&内部活跃。无论FTP是否正常工作,该函数都将返回一个布尔值。当您请求文件列表时会有一些浪费,但只有在您太彻底时才需要这样做。您可以删除“阅读器”以及我认为的反应流:: - )。

希望这有助于:: - )。

答案 3 :(得分:0)

我认为您首先必须在执行GetResponse()之前将requestDir.Method设置为某些ftp命令。有关可能的命令,请参阅WebRequestMethods.Ftp。