Добрый вечер,
прошу помощи в решении вопроса.
На локальной машине установлен ftp сервер и я почему-то не могу установить соединение в активном режиме. Хотя тот же тотал командер может.
Перерыл пол инета, и здесь на форумах.
Вот код:
dtpActive = new TcpListener(((IPEndPoint)ftp.Client.LocalEndPoint).Address, ((IPEndPoint)ftp.Client.LocalEndPoint).Port + 1);// IP адрес клиента и порт + 1 от порта по которому установлено контрольное соединение.
dtpActive.Start();// начинаю слушать
PORT(((IPEndPoint)ftp.Client.LocalEndPoint).Address, ((IPEndPoint)ftp.Client.LocalEndPoint).Port + 1, ref iostream);// как я прочел в одной статье то сейчас вроде надо отправить команду PORT
TcpClient tmpTcpCl = dtpActive.AcceptTcpClient();// делаю accept по идее установившемуся соединению, но здесь прога висит и ждет это соединения до бесконечности
Не могу понять в чем проблема. Может я чето не так понял из доков ?
Re: FTP активный режим
От:
Аноним
Дата:
04.02.08 15:11
Оценка:
>>IP адрес клиента и порт + 1 от порта по которому установлено контрольное соединение.
Это не правильно. Порт для прослушивания система должна выбирать сама.
>>>IP адрес клиента и порт + 1 от порта по которому установлено контрольное соединение.
А>Это не правильно. Порт для прослушивания система должна выбирать сама.
так как жеш она выберет сама если TcpListener требует порт чтобы принят входяшее подключение.
темболее для активного режима серверу надо послать порт, чтоб он занал куда конектится. а я прочел что ему нужно отправить тот порт который используется коиентом для подключения к серверу плюс один.
Re[3]: FTP активный режим
От:
Аноним
Дата:
13.02.08 14:49
Оценка:
Здравствуйте, gregsparrow, Вы писали:
G>Здравствуйте, Аноним, Вы писали:
>>>>IP адрес клиента и порт + 1 от порта по которому установлено контрольное соединение.
А>>Это не правильно. Порт для прослушивания система должна выбирать сама.
G>так как жеш она выберет сама если TcpListener требует порт чтобы принят входяшее подключение. G>темболее для активного режима серверу надо послать порт, чтоб он занал куда конектится. а я прочел что ему нужно отправить тот порт который используется коиентом для подключения к серверу плюс один.
В сокетах обычно для автоматического назначения выбирается 0 порт, а система уже сама назначает свободный.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, gregsparrow, Вы писали:
G>>Здравствуйте, Аноним, Вы писали:
>>>>>IP адрес клиента и порт + 1 от порта по которому установлено контрольное соединение.
А>>>Это не правильно. Порт для прослушивания система должна выбирать сама.
G>>так как жеш она выберет сама если TcpListener требует порт чтобы принят входяшее подключение. G>>темболее для активного режима серверу надо послать порт, чтоб он занал куда конектится. а я прочел что ему нужно отправить тот порт который используется коиентом для подключения к серверу плюс один.
А>В сокетах обычно для автоматического назначения выбирается 0 порт, а система уже сама назначает свободный.
всеравно что то не выходит ...
dtpActive = new TcpListener(((IPEndPoint)ftp.Client.LocalEndPoint).Address, 0); // система сама выберает порт
dtpActive.Start(); // начинаю слушать
PORT(((IPEndPoint)ftp.Client.LocalEndPoint).Address, ((IPEndPoint)dtpActive.LocalEndpoint).Port, ref iostream); // отправляю серверу тот порт что выбрала система , чтобы к нему он конектился
TcpClient tmpTcpCl = dtpActive.AcceptTcpClient(); // здесь все и застревает, нихочет принимать соединение ..
Здравствуйте, gregsparrow, Вы писали:
G>Добрый вечер, G>прошу помощи в решении вопроса. G>На локальной машине установлен ftp сервер и я почему-то не могу установить соединение в активном режиме. Хотя тот же тотал командер может. G>Перерыл пол инета, и здесь на форумах.
G>Вот код:
G>
G>dtpActive = new TcpListener(((IPEndPoint)ftp.Client.LocalEndPoint).Address, ((IPEndPoint)ftp.Client.LocalEndPoint).Port + 1);// IP адрес клиента и порт + 1 от порта по которому установлено контрольное соединение.
G>dtpActive.Start();// начинаю слушать
G>PORT(((IPEndPoint)ftp.Client.LocalEndPoint).Address, ((IPEndPoint)ftp.Client.LocalEndPoint).Port + 1, ref iostream);// как я прочел в одной статье то сейчас вроде надо отправить команду PORT
G>TcpClient tmpTcpCl = dtpActive.AcceptTcpClient();// делаю accept по идее установившемуся соединению, но здесь прога висит и ждет это соединения до бесконечности
G>
G>Не могу понять в чем проблема. Может я чето не так понял из доков ?
Сниффер вам в руки.
з.ы. dtpActive.Start() блокирует выполнение программы далее?
Здравствуйте, Stuw, Вы писали:
S>Здравствуйте, gregsparrow, Вы писали:
G>>Добрый вечер, G>>прошу помощи в решении вопроса. G>>На локальной машине установлен ftp сервер и я почему-то не могу установить соединение в активном режиме. Хотя тот же тотал командер может. G>>Перерыл пол инета, и здесь на форумах.
G>>Вот код:
G>>
G>>dtpActive = new TcpListener(((IPEndPoint)ftp.Client.LocalEndPoint).Address, ((IPEndPoint)ftp.Client.LocalEndPoint).Port + 1);// IP адрес клиента и порт + 1 от порта по которому установлено контрольное соединение.
G>>dtpActive.Start();// начинаю слушать
G>>PORT(((IPEndPoint)ftp.Client.LocalEndPoint).Address, ((IPEndPoint)ftp.Client.LocalEndPoint).Port + 1, ref iostream);// как я прочел в одной статье то сейчас вроде надо отправить команду PORT
G>>TcpClient tmpTcpCl = dtpActive.AcceptTcpClient();// делаю accept по идее установившемуся соединению, но здесь прога висит и ждет это соединения до бесконечности
G>>
G>>Не могу понять в чем проблема. Может я чето не так понял из доков ?
S>Сниффер вам в руки.
S>з.ы. dtpActive.Start() блокирует выполнение программы далее?
dtpActive.Start() ето не блокирует выполнение программы. После етого я удачно посылаю серверу команду PORT. А вот после етого когда делаю dtpActive.AcceptTcpClient(); то программа останавливаеться и ждет входящего подключения.
Здравствуйте, gregsparrow, Вы писали:
G>Здравствуйте, Stuw, Вы писали:
S>>Здравствуйте, gregsparrow
S>>Ответ сервера на команду PORT получаете? Что он отвечает?
G>пишет шо ПОРТ саксэсфул. там проблемя в чемто другом...
тогда попробуй снифером сравнить что происходит, когда тотал конектится и когда твоя прога