Вопрос по протоколу Ftp

  • Автор темы jema
  • Дата начала
J

jema

Гость
#1
Ребята, пишу здесь - так как тут все-таки люди повыше уровнем, и мой вопрос больше по протоколу чем по языку.

Кто разбирается в FTP протоколе - прошу помощи!
Проблема получить список файлов с сервера по ФТП
Команда LIST может давать 2 ответа:
125 Data Connection already open, transfer starting.
и
150 File status okay, about to open data connection. FTP uses two ports: 21 for sending commands, and 20 for sending data. A status code of 150 indicates that the server is about to open a new connection on port 20 to send some data.
(это из документации).

Так вот, есть FTP сервера которые отвечают 125, а есть которые отвечают 150
Почему-то мой скрипт умеет работать только с теми - кто отвечает:
150 Opening ASCII mode data connection for file list
после этого я читаю данные из соединения для данных (открываю его заранее).
Когда же я получаю от сервера:
125 Data connection already open; Transfer starting.
226 Transfer complete.

Из соединенния для данных получаю пустой ответ.
Проблемы вижу две:
1) Почему сервер тут-же отвечает 226 Transfer complete. (все это получаю за один запрос ответа)
2) Почему из соединения для данных ничего не могу прочитать?

Отправка команд:
Код:
			if($Cmd) if(!@fputs($this->CmdSocket, $Cmd . "\r\n")) {$Error = 'Connect lost'; return false;} 
sleep(1); 
if(!$Error = trim(@fread($this->CmdSocket, 4096))) {$Error = 'No answer'; return false;}
return substr($Error,0,3)
Перед командой LIST создаю соединение на основании ответа команды PASV
227 Entering Passive Mode (2хх,1хх,1хх,1хх,4,65).

После ответ LIST
125 Data connection already open; Transfer starting.
226 Transfer complete.
Пытаюсь читать - пусто.

Думал, может сервер отдает, а скрипт не успевает прочитать.
Пробовал перед LIST в отдельном потоке слушать порт - тишина - ничего нет.

Куда копать??? Обычный ФТП-клиент нормально заходит на сервер =(