我正在尝试将文件上传到ftp服务器。尝试了一些代码示例,但始终收到此错误,进入被动模式。例如,我可以使用此代码创建目录

FtpWebRequest reqFTP;
try
{
    // dirName = name of the directory to create.
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(
             new Uri("ftp://" + ftpServerIP + "/" + dirName));
    reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
    reqFTP.UseBinary = true;
    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    reqFTP.UsePassive = false;
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    Stream ftpStream = response.GetResponseStream();

    ftpStream.Close();
    response.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}


或者例如,我可以重命名文件。但无法使用此代码上传文件

string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(
         "ftp://" + ftpServerIP + "/" + fileInf.Name));
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.ContentLength = fileInf.Length;

int buffLength = 2048;
byte[] buff = new byte[buffLength];
int contentLen;

FileStream fs = fileInf.OpenRead();

try
{
    Stream strm = reqFTP.GetRequestStream();
    contentLen = fs.Read(buff, 0, buffLength);
    while (contentLen != 0)
    {
        strm.Write(buff, 0, contentLen);
        contentLen = fs.Read(buff, 0, buffLength);
    }
    strm.Close();
    fs.Close();
}
catch(Exception ex)
{
    MessageBox.Show(ex.Message, "Upload Error");
}


reqFTP.GetRequestStream()处获取异常。

如果我使用reqFTP.UsePassive=false,我会得到“


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


我该怎么办?

最佳答案

试试这个例子

http://social.msdn.microsoft.com/Forums/en-US/0128e595-c8e2-4f5e-9426-fd93eb510cab/the-remote-server-returned-an-error-227-entering-passive-mode-67228534212130

如果将UsePassive设置为false,则需要确保命令通道的端口已打开(即,您需要定义端点和访问规则)。除非有充分的理由不使用被动模式,否则最好使用被动模式。

希望它会有所帮助。

09-04 02:05