
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.218.72.253] |
![]() |
|
Сообщ.
#1
,
|
|
|
Есть небольшой класс, который реализует работу по протоколу FTP. С основными командами вроде проблем нет, а вот с загрузкой файлов творится нечто непонятное. Сразу скажу, что используются синхронные методы, проставлены таймауты. Если кто не в курсе, для того чтобы скачать файл создаётся новый сокет, порт для которого предоставляет FTP-сервер по получении команды PASV. Если активна сессия на основном порту (21 по-умолчанию), то сервер даёт открыть сокет для приёма файла на том порту, который он указал. Всё вроде бы просто и понятно, но работает через раз. Как удалось выяснить на дебаге, на момент отправления команды PASV соединение на основном порту открыто, а вот к тому моменту, когда я распарсиваю полученные данные с сервера оно успевает помереть
![]() |
Сообщ.
#2
,
|
|
|
Насколько я помню, то при активной сессии, FTP на первый коннект, отправляет где он находится, т.е. он сообщает свой внешний порт и хост. Это связано с тем что некоторые FTP, могут находится за NAT'ом.
Может у вас именно это происходит? |
Сообщ.
#3
,
|
|
|
maxim84_, про NAT был разговор с тех. поддержкой, вроде как мне дали прямой ip сервера, т.е. я к нему по локалке стучусь, хотя, как говорили, коммутируется всё равно через те же маршрутизаторы, что и для общего пользования.
PASV мне IP всегда возвращает тот же, что и при установке соединения я указываю, т.е. только порт меняется при PASV... Не может же он через раз то под NAT'ом, то напрямую соединять. |
Сообщ.
#4
,
|
|
|
на FTP возможно установлен диапазон портов, а не конкретный порт, он из этого диапазона и берет каждый раз...
Можете погуглить на тему настроек FTP сервера в активной сессии. Мне знакомо такое поведение у FTP FileZilla Server (или как там его...). |
Сообщ.
#5
,
|
|
|
Цитата maxim84_ @ на FTP возможно установлен диапазон портов, а не конкретный порт, он из этого диапазона и берет каждый раз... это как раз не проблема, PASV возвращает мне порт, на котором я должен открыть соединение. Цитата maxim84_ @ Можете погуглить на тему настроек FTP сервера в активной сессии. Мне знакомо такое поведение у FTP FileZilla Server (или как там его...). хорошо, сейчас помучаю google ![]() |
Сообщ.
#6
,
|
|
|
собственно такой вопрос, а тотже самый FileZilla работает с вашем сервером?
|
Сообщ.
#7
,
|
|
|
Цитата maxim84_ @ собственно такой вопрос, а тотже самый FileZilla работает с вашем сервером? Действительно, в клиенте FileZilla отображается последовательность команд сессии с ответами сервера. Сравните со своими. |
Сообщ.
#8
,
|
|
|
Цитата Vladimir @ Действительно, в клиенте FileZilla отображается последовательность команд сессии с ответами сервера. Сравните со своими. Отображается, да, только они всё-таки немного её форматируют. Спасибо за советы, в итоге нашёл небольшой недочёт при работе с протоколом, вроде всё поправил. |