FTP服务器用的Serv-U,FTP连接端口设置的是2021,FTP数据端口指定了2022。
在防火墙上面将公网IP的2021和2022做了端口映射到FTP服务器的2021和2022。C#用FtpWebResponse进行连接,提示“应 PASV 命令的请求,服务器返回了一个与 FTP 连接地址不同的地址。”用FlashFXP进行连接,一切正常。请教大侠们,这种情况应该处理,需要C#连接FTP服务器进行文件传输。

解决方案 »

  1.   

    试试将FtpWebRequest的UsePassive属性设置为false看可以不
      

  2.   

    将FtpWebRequest的UsePassive属性设置为false,会导致“请求超时”。
      

  3.   

    var reqFTP = (FtpWebRequest)
                               WebRequest.Create(new Uri(uri));             reqFTP.Credentials = new NetworkCredential(JobConst.ftpUserID, JobConst.ftpPassword);              reqFTP.Method = WebRequestMethods.Ftp.UploadFile;             reqFTP.UseBinary = true;
                 reqFTP.ContentLength = fileInf.Length;
                reqFTP.EnableSsl = false;
                 const int buffLength = 2048;
                var buff = new byte[buffLength]; 
                 FileStream fs = fileInf.OpenRead();            try
                {
                     Stream strm = reqFTP.GetRequestStream(); 
                     int contentLen = fs.Read(buff, 0, buffLength);                 while (contentLen != 0)
                    {
                         strm.Write(buff, 0, contentLen);
                        contentLen = fs.Read(buff, 0, buffLength);
                    }                 strm.Close();
                    fs.Close();                return true;
      

  4.   

    谢谢回复,这样还是会报错呢。“应 PASV 命令的请求,服务器返回了一个与 FTP 连接地址不同的地址。”
      

  5.   

    我想客户端使用被动模式连接FTP服务器。
    有代码的请帮忙贴出来,谢谢。
      

  6.   

    找到了解决办法,但是不明白其中的原因。
    具体如下:
    将工程改成.net 4.0(原来是.net 2.0)就可以。还望知道其中细节的大侠给出解释,谢谢。
      

  7.   

    2.0据说有bug
    我用的是4.0,也是servU服务器
    没有楼主说的问题
      

  8.   

    你的服务器也放在防火墙内吧?
    ftp访问也是通过端口映射访问的?
    ftp客户端也是采用被动模式?