尝试使用.net FtpWebRequest类下载文件时出错

时间:2009-05-06 02:55:20

标签: c# ftp

错误信息是:

服务器返回一个地址以响应PASV命令,该命令与FTP连接的地址不同。

当我尝试调用下面的GetResponse()方法时,我收到此消息... 请帮忙。

这是我的C#代码:

FileStream outputStream = new FileStream(feedXmlPath +“\”+       “testXml”,FileMode.Create);

        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpURL + "/" + zipFileName);

        request.UseBinary = true;

        request.Credentials = new NetworkCredential(userName, password);

        request.KeepAlive = false;

        request.Method = WebRequestMethods.Ftp.DownloadFile;

      FtpWebResponse response = (FtpWebResponse)request.GetResponse();
      Stream ftpStream = response.GetResponseStream();

      long cl = response.ContentLength;
      int bufferSize = 2048;
      int readCount;
      byte[] buffer = new byte[bufferSize];

      readCount = ftpStream.Read(buffer, 0, bufferSize);


        while (readCount > 0)
      {
          outputStream.Write(buffer, 0, readCount);
          readCount = ftpStream.Read(buffer, 0, bufferSize);
      }

      ftpStream.Close();
      outputStream.Close();
      response.Close();

2 个答案:

答案 0 :(得分:1)

如果您使用NAT,则出于安全原因,不允许使用FTPWebRequest。查看Connect上的这篇文章。

MSDN上的这篇文章也可能会有所帮助。

答案 1 :(得分:0)

尝试切换Passive值以查看哪些有效:

    request.UsePassive = false;

这可能取决于计算机(客户端和服务器)之间的防火墙。

我注意到如果我通过防火墙,我需要将它保留为True,否则它将返回异常:

  

远程服务器返回错误:(500)语法错误,命令   无法识别的。

但是,如果我在防火墙后面(就像在数据中心内直接相互连接的两台机器)那么我需要将其设置为False,否则它将返回异常:

  

服务器返回一个地址以响应PASV命令,该命令与FTP连接所在的地址不同   制成。