Страница 1 из 1

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

СообщениеДобавлено: 03.07.2016 15:37:46
VirtUX
Дано:
Смартфон на 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), то потерь не бывает. Т.е. пакеты теряются только при широковещательном адресе.
Как обойти эту проблему? Или как другим способом отсылать данные сразу на несколько устройств (ноутбуки, смарты, и т.п.) одновременно?

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

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

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

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

Есть другое решение: найти готовую библиотеку, но я не заморачивался

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

СообщениеДобавлено: 06.07.2016 12:47:43
VirtUX
Т.е. потеря пакетов зависит 100% из-за работы Wi-Fi? Следовательно, если подключиться по витой паре, то потери должны исчезнуть? Или для UDP-протокола гарантии доставки широковещательного пакета всё одно нет, даже при условии, что все приёмники находятся в одной подсети?

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

СообщениеДобавлено: 06.07.2016 13:40:26
CynicRus
Именно, цимес UDP протокола в том, что он не гарантирует никакой доставки. Если нужна гарантированная доставка, тогда нужно использовать TCP или SCTP.