2010-11-03 78 views
3

我想测试给定的IP和登录详细信息,以查看FTP服务器是否处于活动状态/详细信息是否正确。而已。C# - 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()

在此先感谢。

+0

会发生什么事,如果你省略'FTP://'? – Skurmedel 2010-11-03 12:48:46

回答

4

您需要设置的FTP请求的方法:

requestDir.Method = WebRequestMethods.Ftp.ListDirectory; 
+0

嗨,这种方法是功能性的,但它很慢。如果证书是错误的,我必须等待捕获超时异常。有没有什么办法像Fillezilla的作品一样快一点? – 2011-10-24 15:06:22

+1

这可能完全取决于服务器,如果服务器只是选择删除所有不正确的请求,而不是给出否定响应,您必须等待。虽然如果服务器实际上给你一个否定的响应,但会有一个异常(或者根据操作可能为空结果)。 – flindeberg 2011-11-21 15:05:24

2

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

它记住,这是一个FTP请求类,而不是一个FTP客户端是非常重要的,也就是说,它执行特定的操作,而不是打开一个通道,让您可以浏览,上传,下载等

+0

只是打我吧 – 2010-11-03 12:51:07

+0

@David Kemp:有了你的答案的特异性,我认为你关闭了我的漏洞...... +1;) – Lazarus 2010-11-03 13:03:44

1

为什么你不是简单地在catch 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,然后在内部尝试两个被动的&激活。无论FTP是否工作,该函数都会返回一个布尔值。当你申请一个文件列表时,会有一些浪费,但只有当你过于彻底时才有必要。您可以删除“读者”以及我认为的答复流:: - )。

希望这可以帮助:: - )。

0

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