2013-09-20 5 views
2

Я пытаюсь загрузить файл на ftp-сервер. попробовал некоторые образцы кода, но всегда получал эту ошибку, вступая в пассивный режим. например, я могу создать каталог с этим кодомОшибка FTP 227 вход в пассивный режим

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 тогда я получаю «

The remote server returned an error: (500) Syntax error, command unrecognized”.

Что я должен делать?

+0

Любой, у кого есть эта проблема, [добавить журнал] (http://stackoverflow.com/q/9664650/850848) на вопрос (или опубликовать новый вопрос и связать его здесь). Без журнала вопрос не отвечает. –

ответ

1

Попробуйте этот пример

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 ложь, то вам необходимо убедиться, что порт для командного канала открыт (т.е. вам необходимо определить конечные точки и правила доступа) , Если нет веских оснований не использовать пассив, вам гораздо лучше использовать пассивный.

Надеюсь, это поможет.

+1

как я сказал, если я использую reqFTP.UsePassive = false, тогда я получаю «Удаленный сервер возвратил ошибку: (500) Ошибка синтаксиса, команда unrecognized" – echbel