0 / 0 / 0
Регистрация: 19.04.2010
Сообщений: 4
|
|
1 | |
Знание протокола TCP под Linux, передача данных между клиентом и FTP сервером реализация на С++19.04.2010, 17:29. Просмотров 3519. Ответов 7
Метки нет Все метки)
(
Вопрос собственно такой. Есть программа, реализующая передачу данных с ftp сервера на клиент в активном режиме, написана на Си++. Насколько я понимаю активный режим, это когда все происходит по такой схеме. Клиент со своего порта посылает запрос серверу на его 21 порт, запрос на передачу данных. А сервер в свою очередь с 20-го порта пересылает данные клиенту. Собственно говоря вопрос в том, как сервер узнает на какой порт к клиенту он должен подключиться.
Я приложил программу в ней вроде как это реализовано, по крайней мере работает, но. Проблема в том, что например я задаю порт с которого клиент будет связываться с сервером конкретный, в самом начале программы, а когда я смотрю логи передачи файлов, оказывается что реальный порт на который передавались данные отличается. Кто может подробно объясните как это реализовано какими функциями и тд. желательно в программном коде. Заранее большое спасибо знающим людям!!! http://narod.ru/disk/19886542000/ftp.cpp.html вот как работает протокол tcp 21/tcp - это управляющий порт. По нему передаются только команды. В активном режиме соединение выглядит так: connect:................... client tcp/[N] --> server tcp/21 // N > 1023 send ftp command:.. PORT [N+1] listen:....................... client tcp/[N+1] connect:................... server tcp/20 --> client tcp/[N+1] Я плохо разбираюсь в программировании и не вижу как и где это реализовано в моем коде, который я приложил, в этом и проблема.
0
|
|
19.04.2010, 17:29 | |
Передача данных между клиентом и сервером Передача данных между клиентом и сервером Безопасная передача данных между клиентом и сервером
|
|
Почетный модератор
7356 / 2620 / 275
Регистрация: 29.07.2006
Сообщений: 13,673
|
|
19.04.2010, 18:24 | 2 |
Например, клиентом послыается, команда типа "PORT 127,0,0,1,150,233\r\n", откуда:
150 = 0х96 233 = 0хЕ9 0x96E9 = 38633 - номер порта. Потом с 20 порта сервер подключается к клиенту при необходимости. Добавлено через 3 минуты Я код не смотрел. Трейсы бы сделал, было бы понятнее, о чем речь.
0
|
0 / 0 / 0
Регистрация: 19.04.2010
Сообщений: 4
|
|
19.04.2010, 18:26 [ТС] | 3 |
код вот http://paste.org/pastebin/view/17534 - ссылка
а можно подробнее объяснить что вот это такое sprintf(buf, "PORT %d,%d,%d,%d,%d,%d\r\n", (uchar_t)host->h_addr_list[0][0], (uchar_t)host->h_addr_list[0][1], (uchar_t)host->h_addr_list[0][2], (uchar_t)host->h_addr_list[0][3], (uchar_t)(cur_port>>8), (uchar_t)cur_port); Я прочел весь этот мануал http://rsdn.ru/article/unix/sockets.xml который нашел, он показался мне довольно хорошим, но вот в этом месте не разобрался, не шарю в программировании к сожалению. что вот это такое очень интересует -(uchar_t)(cur_port>>8), (uchar_t)cur_port); еще по всей программе текущий порт увеличивается таким образом "cur_port++" не совсем понятно для чего это делается, какие-то тонкости работы протокола tcp?
0
|
0 / 0 / 0
Регистрация: 19.04.2010
Сообщений: 4
|
|
19.04.2010, 18:33 [ТС] | 5 |
что такое трейсы?
то, что это формирование понятно, не совсем понятно как оно происходит
0
|
Почетный модератор
7356 / 2620 / 275
Регистрация: 29.07.2006
Сообщений: 13,673
|
|
19.04.2010, 18:36 | 6 |
komis, конкретно эту строчку можешь вывести обычным сишным принтом. По поводу трейсов http://ru.wikipedia.org/wiki/Wireshark .
0
|
0 / 0 / 0
Регистрация: 19.04.2010
Сообщений: 4
|
|
19.04.2010, 19:29 [ТС] | 7 |
отпишитесь в аську пожалуйста, как будет свободная минута 2Зодин993два89
0
|
Почетный модератор
7356 / 2620 / 275
Регистрация: 29.07.2006
Сообщений: 13,673
|
|
19.04.2010, 20:07 | 8 |
То, что порт инкрементируется в коде, это нормально. каждый раз при запросе данных с сервера будет использоваться новое значение порта на стороне клиента. Если сделать поиск по cur_port все места, где меняется значение порта будут видны. По трейсам все было бы видно.
0
|
19.04.2010, 20:07 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Как с помощью протокола IP передавать сообщения между клиентом и сервером?
Обмен данными между Сервером и Клиентом TCP Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |