Отправлять одинаковые пакеты нескольким клиентам - PullRequest
2 голосов
/ 03 февраля 2011

Мне нужно разработать программное обеспечение для отправки одних и тех же пакетов нескольким получателям. Но я не должен использовать многоадресную схему. !!!! (потому что мой босс глупый человек) так что, в любом случае, проблема в том, что: у меня одинаковые пакеты и несколько IP-адресов (клиенты), и я не могу использовать многоадресную рассылку как я могу сделать это наилучшим образом? я должен использовать с ++ в качестве языка и Linux в качестве платформы. поэтому, пожалуйста, помогите мне

Thanx

Ответы [ 4 ]

0 голосов
/ 19 августа 2011

Вы ограничили себя, отказавшись от многоадресной рассылки.Я полагаю, что отправка пакетов нескольким клиентам - это лишь часть вашего требования, и если вы не укажете больше света, вам будет сложно найти полное решение.

Ожидаете ли вы двустороннюю связь между клиентом и сервером?в этом случае выбор многоадресной рассылки может оказаться сложным.уточните, пожалуйста

Вы должны перебирать клиентов и отправлять пакеты один за другим.Вы можете сохранить сеансы, если ожидаете ответа от клиентов.

Выбор UDP или TCP снова зависит от характера отправляемых данных.при использовании UDP вам потребуется обрабатывать пакеты из последовательности, а также осуществлять повторную передачу.

0 голосов
/ 03 февраля 2011

Вам нужно будет создать на вашем сервере TCP Listerner, работающий на определенном порту, который будет прослушивать входящие соединения Tcp Client (Sockets).

Каждый раз, когда клиент подключается, вам придется кэшировать его в каком-либо типе данных, таком как пара значений Имя (имя, являющееся уникальным именем для значения клиента, а также сетевой поток этого клиента, полученный в результате TCP-сокет).

Затем, когда вы, наконец, будете готовы передать данные, вы можете либо выполнить итерацию по этому набору соединений пары «имя-значение», и отправить им данные в виде байтового массива по одному каждому клиенту, либо создать один поток для каждого подключенного клиента и отправить его данные одновременно.

TCP является громоздким протоколом (из-за его ориентированной на соединение природы), и передача больших данных (таких как видео / изображения) может быть довольно медленной.

UDP определенно является выбором для потоковой передачи больших пакетов данных, но вам придется пойти на компромисс с гарантией доставки.

0 голосов
/ 03 февраля 2011

Это можно сделать с помощью TCP или UDP, в зависимости от ваших требований к надежности.Вы можете терпеть потерянные или переупорядоченные пакеты?Готовы ли вы справиться с таймаутами и ретрансляцией?Если оба ответа "да", выберите UDP.В противном случае оставайтесь с ПТС.Тогда:

  • TCP case.Вместо одного многоадресного сокета UDP у вас будет несколько сокетов TCP, по одному на каждый пункт назначения.Вам нужно будет выяснить лучшую схему для установления соединения.Регулярное прослушивание и прием подключающихся клиентов работает как обычно.Затем вы просто перебираете подключенные сокеты и отправляете свои данные каждому.
  • Случай UDP.Это можно сделать с помощью одного сокета UDP на стороне сервера.Если вам известны IP-адреса и порты клиентов (получателей данных), используйте sendto(2) для одних и тех же данных для каждого адреса / порта.Клиенты должны были бы быть в то время.Если вы не знаете своих клиентов заранее, вам нужно разработать схему для клиентов, которая будет запрашивать данные или просто зарегистрировать на сервере.Вот где recvfrom(2) полезен - он дает вам адрес клиента.
0 голосов
/ 03 февраля 2011

Если ваш босс сказал, что вы не можете использовать многоадресную рассылку, возможно, у него есть причина. Я полагаю, трансляция тоже выходит из игры?

Если это реквизиты, ваш единственный шанс - установить TCP-соединение с каждым удаленным хостом, на который вы хотите отправить пакет.

EDIT
UDP, наоборот, не принесет много пользы по сравнению с многоадресной рассылкой, если ваше приложение будет работать в локальной сети, за которую вы отвечаете за настройку, поэтому я указал TCP.

Может быть, вам нужно немного лучше описать свой сценарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...