【问题标题】:FTP Connection Failing "Unable to connect to the remote server"FTP连接失败“无法连接到远程服务器”
【发布时间】:2012-11-05 16:28:35
【问题描述】:

我正在尝试连接到 FTP 服务器以上传文件。我得到了“ 无法连接”错误。如果我使用命令行并打开 FTP 连接,我可以连接。不知道为什么在以编程方式连接时会出错。任何帮助都将不胜感激。

 FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://1.23.84.2");
 request.Method = WebRequestMethods.Ftp.UploadFile;                   

 request.Credentials = new NetworkCredential("user","password");

 // Copy the contents of the file to the request stream.    
 StreamReader sourceStream = new StreamReader(path);
 byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
 sourceStream.Close();
 request.ContentLength = fileContents.Length;

 Stream requestStream = request.GetRequestStream();
 requestStream.Write(fileContents, 0, fileContents.Length);
 requestStream.Close();

 FtpWebResponse response = (FtpWebResponse)request.GetResponse();

 Console.WriteLine("Upload File Complete, status {0}", 
          response.StatusDescription);

 response.Close();

【问题讨论】:

  • 您的防火墙可能会阻止这些端口。尝试从机器(不是从 ftp 服务器“1.23.84.2"”)远程登录到 ftp 端口...使用 cmd 提示符下的命令提示符,键入:telnet 1.23.84.221
  • 你是对的!如果我 telnet 到上述 IP 地址,我会收到错误“无法在端口 23 上打开与主机的连接”
  • @tranceporter,我需要使用代理来连接吗?
  • 仅供参考,您还应该在 using 块中包含您的 StreamReaderStreamFtpWebResponse,以确保无论是否发生异常它们都得到清理。
  • @JohnSaunders 感谢您的提示。我会毫不犹豫地将它包装在 using 块中。

标签: c# ftpwebrequest


【解决方案1】:

所以经过几个小时的故障排除后,是 McAfee 阻止了 ftp 端口。必须暂时禁用本地计算机上的服务。

【讨论】:

  • lol.. 所以是防火墙(尽管是 MacAfee,而不是 windows)阻止了端口 :)
  • 即使我是我机器上的管理员,我仍然无法配置 McAfee 设置,停止服务本身是最后的手段。
【解决方案2】:

我认为 FtpWebReqest 需要指向目标路径,而不仅仅是服务器的地址,如下所示:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://1.23.84.2/myFile.zip");

在 FtpWebRequest 上下文中 FTP 上传的正确用法可以在 here 找到。

【讨论】:

  • 如果您查看我的代码,在创建 FTP 请求后,我从流中的文件夹中读取了一个文本文件,然后尝试将其添加到 ftp 服务器
  • 可以,但是我认为需要在WebRequest的Create方法中指定服务器上的文件名。如果你看一下我提供的链接,样本表明同样的事情。
  • 是的,文件名必须在FTP连接字符串中指定。我刚刚遇到这个问题并添加文件名修复了错误。
  • 我明白了,我只是在最后添加了一个文件名,它必须是一个 zip。我的文件被称为例如 test.out。我刚刚添加了它,但仍然遇到无法连接的问题:|
  • 不,myFile.zip 只是一个示例,请改用您的文件名 na。