в Compact Framework протокол Ftp не реализован, поэтому я разработал его сам.
У меня есть вопрос о пассивном режиме и командах, которым необходим канал данных для чтения ответа.
В моем случае я пытаюсь получить (RETR) файл на моем FTP-сервере, поэтому я делаю:
Часть, которая хорошо работает:
- OpenControlChannel
- ReadControl (Баннерное сообщение)
- SendUser
- ReadControl (Ожидание пропуска?)
- SENDPASS
- ReadControl (приветственное сообщение)
- SendPassive
- ReadControl (Извлечение IP для канала данных)
Части, которые не очень хорошо работают (но работают тоже, см. Пояснение ниже)
- RETR myFile
- OpenDataChannel
- ReadControl (Здесь я получаю сообщение «Begin Transfert» И
"Transfert complete", перед прочтением
любые данные!)
- ReadData
- CloseDataChannel
- CloseControlChannel
Проблема в том, что мне нужно просто открыть канал данных, чтобы получить сообщение «Transfert complete», даже если я не прочитал никаких данных в потоке, это нормально?
Для меня, когда я открываю канал данных, я должен просто получить
"150 Открытие данных в режиме ASCII
соединение для a.she (0 байт). \ r \ n "
Затем, когда операция чтения завершена:
"226 Передача завершена. \ R \ n"
Когда я смотрю на классический протокол Ftp, используемый в .NET Framework, это имеет место:
FtpWebResponse ftpres = (FtpWebResponse)ftp.GetResponse();
// ftpres.StatusDescription = "150 Opening ASCII mode data connection for a.she (0 bytes).\r\n"
string res = new StreamReader(ftpres.GetResponseStream()).ReadToEnd();
// ftpres.StatusDescription = "226 Transfer complete.\r\n"
Надеюсь, я достаточно ясно ...
Спасибо!