0

我正在尝试通过用 c# 编写的控制台应用程序访问 FTP 服务器。FtpWebRequest.GetResponse()我的应用程序在 try/catch 中的第一行有一个超时。

我可以使用提供给我的凭据和 uri + 端口通过 Filezilla 访问 FTP 服务器。

  • 我已经与我的网络管理员仔细检查了我的凭据。
  • 我尝试在 URI 中指定和不指定端口的情况下运行我的代码。
  • 我试过调整FtpWebRequest.Timeout值。
  • 我试过使用FtpWebRequest.ListDirectory,FtpWebRequest.ListDirectoryDetailsFtpWebRequest.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()

4

0 回答 0