我想测试给定的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()
提前致谢。
答案 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是否正常工作。它依赖于“ListDirectoryDetails”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。