C# - 使用多种下载方法检查多个IP地址

时间:2016-04-21 07:02:53

标签: c# ip flow-control

我是这个网站的新手,所以如果我发现任何格式错误,我会提前道歉。如果需要进一步澄清,请告诉我。

我目前正在开发一个C#程序,旨在从多个http或ftp源代码下载文件。

我希望它通过多个IP地址,然后检查几种方法是否可以成功下载已知文件。如果其中一种方法可以成功下载文件,它应该转到下一个IP并再次执行相同的操作。

到目前为止,我正在使用foreach循环,该循环遍历包含IP的数组并创建名为“IPxx”的文件夹以及FTP和HTTP URI,因为我事先并不知道哪个IP需要FTP或HTTP地址:< / p>

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);
}

到目前为止一切顺利,达到这个水平的一切都按预期工作。 但是,一旦我需要通过几个下载方法并检查是否可以成功下载文件,我就会挣扎,如果没有,它应该转到下一个DownloadMethod并尝试相同。

我想出了以下DownloadTestMethod:

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,但我又一次努力控制流量。

我是一个绝对的初学者,不知道如何从这里开始,以获得我想要的流程。

1 个答案:

答案 0 :(得分:0)

您可能希望查看Task Parallel Library,特别是其WhenAll()方法。 在它下面,您可能希望查看任何方法返回错误/引发异常的情况下的错误处理。

https://msdn.microsoft.com/en-us/library/dd270695(v=vs.110).aspx