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

C#-FTP检查/测试服务器,c#,ftp,C#,Ftp,我想测试给定的IP和登录详细信息,以查看FTP服务器是否处于活动状态/详细信息是否正确。没别的了 我在网上寻找了一个解决方案,但没有一个看起来简单/有说服力,例如,使用Ping类Ping并检查服务器。我有以下问题,但不起作用: static private void testConntecion() { FtpWebRequest requestDir = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://172

我想测试给定的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()中


提前感谢。

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


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

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

变量:_URL、_User、_Pass、_passemode(您可以尝试在两种模式下进行检查)

我忘记了“死”FTP的确切错误是什么,但在捕获中设置断点并不难,查看异常情况并处理它:-)

只需将所有这些放在一个有4个参数的函数中,或者3个参数,您就可以在内部同时尝试被动和主动。无论FTP是否工作,该函数都将返回布尔值。当你请求一个文件列表时会有一点浪费,但是只有当你太彻底的时候才有必要这样做。您可以删除“reader”以及响应流,我认为:-)


希望这有帮助::-)。

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

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

requestDir.Method = WebRequestMethods.Ftp.ListDirectory;

如果你省略了
ftp://
,会发生什么?@David Kemp:鉴于你回答的特殊性,我认为你填补了我的漏洞+1 ;)嗨,这个方法很实用,但是速度很慢。如果凭据错误,我必须等待捕获超时异常。有没有办法像Fillezilla那样更快一点?这可能完全取决于服务器,如果服务器只是选择删除所有不正确的请求,而不是给出否定的响应,那么您必须等待。虽然如果服务器实际给您一个否定的响应,将有一个异常(或者可能是一个空结果,具体取决于操作)。
requestDir.Method = WebRequestMethods.Ftp.ListDirectory;