12
我想從ftp服務器下載文件。 我已經寫了下面的代碼從FTP從ftp服務器下載文件時,「底層連接已關閉」
public void downloadFile(string FTPAddress, string filename, string username, string password, string destFile)
{
try
{
FtpWebRequest request = FtpWebRequest.Create(FTPAddress + filename) as FtpWebRequest;
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.UseBinary = true;
request.KeepAlive = false; //close the connection when done
request.Timeout = 60000;
//Streams
using (var response = request.GetResponse())
{
using (Stream reader = response.GetResponseStream())
{
byte[] buffer = new byte[1024];
using (Stream streamFile = File.Create(destFile))
{
while (true)
{
int bytesRead = reader.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
{
break;
}
else
{
streamFile.Write(buffer, 0, bytesRead);
}
}
}
}
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
下載文件,但運行此代碼給我異常時:
基礎連接已關閉: 發生意外的錯誤接收。
可以採取什麼問題幫我...
當KeepAlive屬性設置爲false,當你調用Close方法控制連接被關閉。 在哪一行你會得到這個異常?您是否嘗試使用Timeout屬性(Infinity)的默認值? – Ofiris 2015-04-29 05:32:46
也許這是一個防火牆問題。您是否嘗試過使用主動模式而不是被動模式? – Arjen 2015-04-29 08:19:27
這是您的服務器或本地tcp/ip問題(防火牆,防病毒等)的問題。代碼工作正常,例如,這會在我的磁盤上創建一個ccrisconv.txt文件:'downloadFile(「ftp://ftp.nlm.nih.gov/」,「nlmdata/sample/ccris/ccrisconv.txt」,null ,null,「ccrisconv.txt」);' – 2015-04-30 16:07:05