На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Сокеты и FTP
    Есть небольшой класс, который реализует работу по протоколу FTP. С основными командами вроде проблем нет, а вот с загрузкой файлов творится нечто непонятное. Сразу скажу, что используются синхронные методы, проставлены таймауты. Если кто не в курсе, для того чтобы скачать файл создаётся новый сокет, порт для которого предоставляет FTP-сервер по получении команды PASV. Если активна сессия на основном порту (21 по-умолчанию), то сервер даёт открыть сокет для приёма файла на том порту, который он указал. Всё вроде бы просто и понятно, но работает через раз. Как удалось выяснить на дебаге, на момент отправления команды PASV соединение на основном порту открыто, а вот к тому моменту, когда я распарсиваю полученные данные с сервера оно успевает помереть :blink: Соединение через полученный порт соответственно не устанавливается. Собственно сам парсер - 3 строчки кода, который отрабатывают за миллисекунды. Сегодня так же мучал тех. поддержку на предмет блокировки портов, вроде всё открыто, но на всякий пожарный даже дали полный доступ на всё и вся, ситуацию это не поменяло, так что приходится рыть дальше.
      Насколько я помню, то при активной сессии, FTP на первый коннект, отправляет где он находится, т.е. он сообщает свой внешний порт и хост. Это связано с тем что некоторые FTP, могут находится за NAT'ом.

      Может у вас именно это происходит?
        maxim84_, про NAT был разговор с тех. поддержкой, вроде как мне дали прямой ip сервера, т.е. я к нему по локалке стучусь, хотя, как говорили, коммутируется всё равно через те же маршрутизаторы, что и для общего пользования.
        PASV мне IP всегда возвращает тот же, что и при установке соединения я указываю, т.е. только порт меняется при PASV... Не может же он через раз то под NAT'ом, то напрямую соединять.
          на FTP возможно установлен диапазон портов, а не конкретный порт, он из этого диапазона и берет каждый раз...

          Можете погуглить на тему настроек FTP сервера в активной сессии. Мне знакомо такое поведение у FTP FileZilla Server (или как там его...).
          Сообщение отредактировано: maxim84_ -
            Цитата maxim84_ @
            на FTP возможно установлен диапазон портов, а не конкретный порт, он из этого диапазона и берет каждый раз...

            это как раз не проблема, PASV возвращает мне порт, на котором я должен открыть соединение.
            Цитата maxim84_ @
            Можете погуглить на тему настроек FTP сервера в активной сессии. Мне знакомо такое поведение у FTP FileZilla Server (или как там его...).

            хорошо, сейчас помучаю google :)
              собственно такой вопрос, а тотже самый FileZilla работает с вашем сервером?
                Цитата maxim84_ @
                собственно такой вопрос, а тотже самый FileZilla работает с вашем сервером?


                Действительно, в клиенте FileZilla отображается последовательность команд сессии с ответами сервера. Сравните со своими.
                  Цитата Vladimir @
                  Действительно, в клиенте FileZilla отображается последовательность команд сессии с ответами сервера. Сравните со своими.

                  Отображается, да, только они всё-таки немного её форматируют.

                  Спасибо за советы, в итоге нашёл небольшой недочёт при работе с протоколом, вроде всё поправил.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0322 ]   [ 16 queries used ]   [ Generated: 23.04.24, 17:50 GMT ]