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

本文关键字:几个 地址 IP 检查 几种 C#- 下载 方法 | 更新日期: 2024-10-24 09:58:08

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

我目前正在用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,但我又一次在流控制方面遇到了困难。

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

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

您可能需要查看任务并行库,特别是它的WhenAll()方法。在它下面,您可能希望查看任何方法返回错误/引发异常的情况下的错误处理。

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