我有一个 C# 程序,它每 x 秒检查一次 ftp 目录中的新文件。如果找到新文件,则将其下载。这很好用。如果我在没有运行 ftp 服务器的情况下启动程序,程序会循环并返回无法访问服务器的消息。然后我启动服务器,程序按应有的方式连接。但是如果我再次退出 ftp 服务器,我的程序就会卡在 FtpWebResponse 中。
我在 try catch 块中有一个 using 语句块来关闭所有连接。
while (true)
{
//...
FtpFileList = null;
while (FtpFileList == null)
{
FtpFileList = await GetFtpFileList(adress, user, password);
await Task.Delay(3000);
}
await Task.Delay(27000);
//...
}
public static async Task<List<string>> GetFtpFileList(string address, string user, string password)
{
try
{
List<string> returnValue = new List<string>();
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(address);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential(user, password);
using (FtpWebResponse response = (FtpWebResponse)await request.GetResponseAsync()) //The program gets stuck here
{
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
while (reader.Peek() >= 0)
{
returnValue.Add(reader.ReadLine());
}
}
AddToLogFile(DateTime.Now + ": " + "FTP directory updated");
return returnValue;
}
catch (WebException e)
{
AddToLogFile(DateTime.Now + ": " + e.Message);
return null;
}
}
我希望程序在连接丢失后重新连接到服务器,但它却卡住了。
感谢任何帮助和提示如何解决该问题。