1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "С и С++", создана пользователем jema, 23 дек 2009.

  1. jema

    jema Гость

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

    Кто разбирается в 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 в отдельном потоке слушать порт - тишина - ничего нет.

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

Поделиться этой страницей