Synapse и широковещательные сообщения

Общие вопросы программирования, алгоритмы и т.п.

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

Synapse и широковещательные сообщения

Сообщение VirtUX » 03.07.2016 15:37:46

Дано:
Смартфон на Android, который шлет сообщения (10 шт. с паузой в 100 млс. между ними) по UDP на адрес 192.168.0.255.
Ноутбук с Linux и второй ноутбук с Windows, которые ловят сообщения. Использую TUDPBlockSocket (в коде он SockMain).
Код:
Код: Выделить всё
while SockMain.WaitingData <> 0 do begin
           // Считаем данные из буфера
           q := SockMain.RecvPacket(-1);
           // текущее время
           tNowCheck := Time;
           aMes[cou].s := q;
           aMes[cou].t := tNowCheck;
           cou += 1;
           sleep(1);
        end;               

Не постоянно, но теряются пакеты. Например Один ноутбук может пропустить 4 и 6 пакет из 10-ти отосланных; а второй ноутбук пропустить 2, 3 и 7, или не пропустить вовсе.

Если слать с Android по конкретному адресу (192.168.0.105), то потерь не бывает. Т.е. пакеты теряются только при широковещательном адресе.
Как обойти эту проблему? Или как другим способом отсылать данные сразу на несколько устройств (ноутбуки, смарты, и т.п.) одновременно?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Synapse и широковещательные сообщения

Сообщение wavebvg » 04.07.2016 10:42:58

VirtUX писал(а):Не постоянно, но теряются пакеты. Например Один ноутбук может пропустить 4 и 6 пакет из 10-ти отосланных; а второй ноутбук пропустить 2, 3 и 7, или не пропустить вовсе.

Ну это WiFi, что с ним сделаете? Можно попытаться настроить, но это зафиксирует IP вещателя.

Решение очень простое и повсеместно используется:
1. Не использовать UDP пакеты широковещательной рассылки для передачи данных
2. Использовать UDP пакеты широковещательной рассылки только для поиска хостов и передачи данных для последующего установления прямого соединения
3. Отключать клиентов явно (либо, если допустимо, по таймауту)
4. Добавить процедуру реидентификации для клиента (если недопустимо отваливаться по таймауту)

Есть другое решение: найти готовую библиотеку, но я не заморачивался
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35

Re: Synapse и широковещательные сообщения

Сообщение VirtUX » 06.07.2016 12:47:43

Т.е. потеря пакетов зависит 100% из-за работы Wi-Fi? Следовательно, если подключиться по витой паре, то потери должны исчезнуть? Или для UDP-протокола гарантии доставки широковещательного пакета всё одно нет, даже при условии, что все приёмники находятся в одной подсети?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Synapse и широковещательные сообщения

Сообщение CynicRus » 06.07.2016 13:40:26

Именно, цимес UDP протокола в том, что он не гарантирует никакой доставки. Если нужна гарантированная доставка, тогда нужно использовать TCP или SCTP.
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 11

Рейтинг@Mail.ru