2016-04-21 60 views
0

我是這個網站的新手,所以我提前道歉,如果我做任何格式錯誤。讓我知道是否需要進一步澄清。C# - 用幾種下載方法檢查幾個IP地址

我目前正在研究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); 
} 

到目前爲止,一切達到這個水平是按預期工作。 但是,我需要經歷幾種下載方法並檢查是否可以成功下載文件,但如果不能,則應該轉到下一個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並且無法下載anytrhing,我希望它發送一封自動電子郵件。我知道如何實施EmailMethod,但我又一次遇到了流量控制問題。

我是一個絕對的初學者,不知道如何從這裏去得到我想要的流程。

回答