Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost::asio - UDP Server Что, как, с чего начать? Множеству клиентов, раздавать один файл. 
V
    Опции темы
andrew_121
Дата 23.6.2008, 03:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Есть задача: Множеству клиентов, раздавать один файл.
Предполагаю использовать boost::asio::ip::udp::socket.
Рассылаемый файл больше объема пакета. Файл будет разбиваться на блоки. Клиенты помимо UDP, подключаются по TCP для получения информации о файле: кол-во пакетов, ID пакетов, запрос определенного пакета.
Так же, нужно реализовать возможность, перехвата пакетов(которые являются частью одного и того же файла) передаваемыми для других программ клиентов, дабы снизить нагрузку на исходящий трафик программы Сервера.

С протоколом UDP не работал. Толком не представляю с чего начать.
По ходу общения буду задавать конкретные вопросы.
Давайте обсудим этот вопрос в слух.

Это сообщение отредактировал(а) andrew_121 - 23.6.2008, 05:28


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 23.6.2008, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 5
Всего: 154



В документации к библиотеке есть пример юдп клиента и сервера...

Цитата(andrew_121 @  23.6.2008,  03:07 Найти цитируемый пост)
Рассылаемый файл больше объема пакета. Файл будет разбиваться на блоки. Клиенты помимо UDP, подключаются по TCP для получения информации о файле: кол-во пакетов, ID пакетов, запрос определенного пакета.

Вопрос, а почему-бы не отправлять все по TCP? 
UDP не гарантирует что пакеты придут в том-же порядке, не гарантирует их целостность, в итоге ты реализуешь в своей программе функционал который предоставляет протокол TCP "из коробки", зачем?

Цитата(andrew_121 @  23.6.2008,  03:07 Найти цитируемый пост)
Так же, нужно реализовать возможность, перехвата пакетов(которые являются частью одного и того же файла) передаваемыми для других программ клиентов, дабы снизить нагрузку на исходящий трафик программы Сервера.

тут подробнее, кто передает, кто перехватывает... не очень понятно, и стоит ли оптимизировать здесь что-то...?
PM MAIL Skype GTalk   Вверх
andrew_121
Дата 23.6.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Lazin:
Цитата(Lazin @  23.6.2008,  07:55 Найти цитируемый пост)
UDP не гарантирует что пакеты придут в том-же порядке

И не надо. Пакеты записываются по мере поступления.
Цитата(Lazin @  23.6.2008,  07:55 Найти цитируемый пост)
не гарантирует их целостность

Для этого каждый пакет содержит контрольную сумму блока. И TCP, для запроса мертвого пакета.
Цитата(Lazin @  23.6.2008,  07:55 Найти цитируемый пост)
кто передает, кто перехватывает

Т.е. Клиент номер 1, получает файл 1.bin, клиент 2, позже начинает получать тот-же файл. Но по ходу получения пакетов которые он запрашивает, он перехватывает пакеты предназначавшиеся для 1-го клиента.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 23.6.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 5
Всего: 154



Цитата(andrew_121 @  23.6.2008,  09:18 Найти цитируемый пост)
Т.е. Клиент номер 1, получает файл 1.bin, клиент 2, позже начинает получать тот-же файл. Но по ходу получения пакетов которые он запрашивает, он перехватывает пакеты предназначавшиеся для 1-го клиента. 

перехватить UDP пакет не сложно, но вот программе разобраться, что это именно то, что ей нужно, намного сложнее... представь сколько у тебя будет этих пакетов smile 
проще, если клиент №1 будет сначала опрашивать клиента №2, потом №3 и тд.. на наличие файла(или нужной части файла), а потом уже просить сервер...
PM MAIL Skype GTalk   Вверх
andrew_121
Дата 23.6.2008, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(Lazin @  23.6.2008,  09:50 Найти цитируемый пост)
перехватить UDP пакет не сложно, но вот программе разобраться, что это именно то, что ей нужно, намного сложнее...

Для этого, пакет содержит всю необходимую информацию.

Цитата(Lazin @  23.6.2008,  09:50 Найти цитируемый пост)
проще, если клиент №1 будет сначала опрашивать клиента №2, потом №3 и тд.. на наличие файла(или нужной части файла), а потом уже просить сервер... 

Согласен. Но обмен между клиентами запрещен.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 23.6.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 5
Всего: 154



Цитата(andrew_121 @  23.6.2008,  10:53 Найти цитируемый пост)
Для этого, пакет содержит всю необходимую информацию.

я имел ввиду что это сильно усложнит логику программы

Цитата(andrew_121 @  23.6.2008,  10:53 Найти цитируемый пост)
Согласен. Но обмен между клиентами запрещен.

а почему, если не секрет...
просто если делать так как ты говоришь, то получается что-то не то..
допустим у нас N клиентов, каждый из них получает М пакетов в секунду, тогда каждый клиент должен обрабатывать N * М пакетов, тоесть всего в системе будет обрабатываться N^2 * М пакетов в единицу времени...
PM MAIL Skype GTalk   Вверх
andrew_121
Дата 23.6.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(Lazin @  23.6.2008,  11:17 Найти цитируемый пост)
а почему, если не секрет...

Клиенты сети платят за трафик.

Интересно.
А есть ли возможность, при обмене между клиентами, регистрировать обьем переданной информации от Клиента1 к Клиенту2 ?
Для информирования сервера. Ну чтоб он знал, реально полученный обьем клиентом. Даже если часть обьема получена от обмена между клиентами?


Это сообщение отредактировал(а) andrew_121 - 24.6.2008, 20:34


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 23.6.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Цитата(andrew_121 @ 23.6.2008,  11:26)
А есть ли возможность, при обмене между клиентами, регистрировать обьем переданной информации от Клиента1 к Клиенту2 ?
Для информирования сервера. Ну чтоб он знал, реально полученный обьем клиентом. Даже если часть обьема получена от обмена между клиентами?

А кто мешает? Пусть клиенты, когда обращаются за файлами к серверу, сообщают ему, кто, когда и сколько скачал с них.
PM   Вверх
andrew_121
Дата 23.6.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



С принципом определился.
Как правильно разложить задачу по этапам?
С чего начать реализацию?
Что посоветуете почитать?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
andrew_121
Дата 24.6.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(bsa @  23.6.2008,  14:36 Найти цитируемый пост)
А кто мешает? Пусть клиенты, когда обращаются за файлами к серверу, сообщают ему, кто, когда и сколько скачал с них. 

Интересовался - НЕЛЬЗЯ!
Обьясните плз.
Каким образом клиент и сервер заставить общаться?
В примерах boost::asio несколько вариантов сервера. Какой использовать? В чем разница?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 24.6.2008, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



Цитата(andrew_121 @  23.6.2008,  09:18 Найти цитируемый пост)
Но по ходу получения пакетов которые он запрашивает, он перехватывает пакеты предназначавшиеся для 1-го клиента. 

это невозможно
каждый клиент определяется уникальной парой {IP, порт}
достаточно на стороне сервера для каждого клиента реализовать отображение {IP, порт} -> смещение
где смещение определяет текущую позицию в передаваемом файле


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
andrew_121
Дата 24.6.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



MAKCim - Пакеты передаются по UDP, а контроль по TCP.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 24.6.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



andrew_121
и что?



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
andrew_121
Дата 24.6.2008, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



MAKCim - Блин... А что-то не то говорю?
Ну объясни. Я насколько понимаю, один UDP пакет, могут поймать все клиенты, и по информации в нем, определить, свой-чужой.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 24.6.2008, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



Цитата(andrew_121 @  24.6.2008,  21:38 Найти цитируемый пост)
один UDP пакет, могут поймать все клиенты

нет
клиенты сидят на разных портах


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0856 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.