我是这个网站的新手,所以如果我犯了任何格式错误,我提前道歉。让我知道是否需要进一步澄清。
我目前正在使用 C# 编写一个程序,该程序旨在从多个 http 或 ftp 源下载文件。
我希望它通过几个 IP 地址,然后检查几种方法是否可以成功下载已知文件。如果其中一种方法可以成功下载文件,它应该转到下一个 IP 并再次执行相同的操作。
到目前为止,我正在使用一个 foreach 循环,该循环遍历包含 IP 的数组并创建一个名为“IPxx”的文件夹以及一个 FTP 和 HTTP URI,因为我事先不知道哪个 IP 需要 FTP 或 HTTP 地址:
string[] ipArray = new string[4];
ipArray[0]= "xxx.xxx.xxx.xx";
ipArray[1]= "xxx.xxx.xxx.xx";
ipArray[2]= "xxx.xxx.xxx.xx";
ipArray[3]= "xxx.xxx.xxx.xx";
foreach(string ip in ipArray )
{
string ipXx = "IP" + ip.Substring(ip.Length-2);
string ipOrdner = folder + @"\" + ipXx;
Directory.CreateDirectory(ipOrdner);
string ftpAddr= "ftp://" + ip;
string httpAddr= "http://"+ip;
//DownloadTestMethod(httpAddr, ipFolder);
//DownloadTestMethod2(ftpAddr, ipFolder);
//DownloadTestMethod3(htppAddr, ipFolder);
}
到目前为止一切顺利,达到这个水平的一切都按预期工作。但是,当我需要通过几种下载方法并检查我是否可以成功下载文件时,我会很挣扎,如果不能,它应该转到下一个下载方法并尝试相同的方法。
我想出了以下下载测试方法:
public static void DownloadTestMethod(string httpAddr, string ipFolder)
{
string fileName = "test_10k.bin";
string downloadpath = httpAddr + "/" + fileName;
// I want it to check if the http site is online/working
WebRequest request = WebRequest.Create(downloadpath);
request.Proxy.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response != null)
{
WebClient webClient = new WebClient();
webClient.Proxy.Credentials=CredentialCache.DefaultCredentials;
webClient.DownloadFile(downloadpath, ipFolder + @"\" + fileName);
}
}
它适用于成功下载的文件,但是如果该方法无法下载请求的文件,我似乎会在此方法中“卡住”。在这种情况下,我希望它跳转到下一个 DownloadMethod 并再次检查,直到检查完所有方法。
此外,如果该程序通过每个 IP 并且无法下载任何内容,我希望它发送一封自动电子邮件。我知道如何实现 EmailMethod,但我又一次遇到了流控制。
我是一个绝对的初学者,不知道如何从这里获得我想要的流量。