我正在尝试通过用 c# 编写的控制台应用程序访问 FTP 服务器。FtpWebRequest.GetResponse()
我的应用程序在 try/catch 中的第一行有一个超时。
我可以使用提供给我的凭据和 uri + 端口通过 Filezilla 访问 FTP 服务器。
- 我已经与我的网络管理员仔细检查了我的凭据。
- 我尝试在 URI 中指定和不指定端口的情况下运行我的代码。
- 我试过调整
FtpWebRequest.Timeout
值。 - 我试过使用
FtpWebRequest.ListDirectory
,FtpWebRequest.ListDirectoryDetails
和FtpWebRequest.DownloadFile
. 我试过有无
FtpWebRequest.UsePassive = false
.class Program { static void Main(string[] args) { //Uri uri = new Uri(@"ftp://1.2.3.4:990/directory/file.csv"); Uri uri = new Uri(@"ftp://1.2.3.4:990/directory"); FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(uri); ftpRequest.Credentials = new NetworkCredential("username", "password"); //ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile; //ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; //ftpRequest.UsePassive = false; ftpRequest.Timeout = Convert.ToInt32(0.5d * 60 * 1000); try { FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse(); StreamReader streamReader = new StreamReader(response.GetResponseStream()); List<string> directories = new List<string>(); string line = streamReader.ReadLine(); while (!string.IsNullOrEmpty(line)) { directories.Add(line); line = streamReader.ReadLine(); } } catch (WebException we) { Console.WriteLine("Message:\r\n\t{0}\r\n", we.Message); Console.WriteLine("Response:\r\n\t{0}\r\n", we.Response); Console.WriteLine("Response code:\r\n\t{0}\r\n", ((FtpWebResponse)we.Response).StatusCode); Console.WriteLine("Response StatusDescription:\r\n\t{0}\r\n", ((FtpWebResponse)we.Response).StatusDescription); Console.WriteLine("Stacktrace:\r\n\t{0}\r\n", we.StackTrace); } catch (Exception e) { Console.WriteLine("Exception.ToString:\r\n\t{0}", e.ToString()); } finally { Console.ReadLine(); } } }
每次运行此代码时,我都会收到以下输出。
信息:
操作已超时。
回复:
System.Net.FtpWebResponse
响应代码:
不明确的
响应状态描述:
堆栈跟踪:
在 c:\Visual Studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line27 中的 ConsoleApplication1.Program.Main(String[] args) 的 Syste.NetFtpWebRequest.GetResponse()