Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billidean от Ноябрь 27, 2015, 14:52



Название: UDP, несколько устройств и портов
Отправлено: billidean от Ноябрь 27, 2015, 14:52
Добрый день всем.
Когда-то писал прогу на Qt с использованием udp-сокета, все работало, передавалось туда-сюда... Но все было для одного девайса с обменом по одному порту.
Сейчас поставили мне задачу написать прогу, обменивающуюся по udp с несколькими девайсами (с разными адресами конечно же).
Причем работа с каждым из девайсов ведется по двум портам, по одному обмен командами, по другому обмен потоками данных.

Внимание, вопрос ( :)):
1. Для каждого девайса нужен отдельный QUdpSocket?
2. Для каждого из портов нужен свой отдельный QUdpSocket?

Я могу, конечно и сам поискать в нете, порыть в доках (чем в ближайшее время и займусь), но может у кого есть такой опыт и он подтолкнет в нужном направлении, буду очень рад (скажу СПАСИБО).


Название: Re: UDP, несколько устройств и портов
Отправлено: Bepec от Ноябрь 27, 2015, 15:14
Всё зависит от протокола вашего. А так можно спокойно сделать менеджер отправки/приёма с общими портами.


Название: Re: UDP, несколько устройств и портов
Отправлено: billidean от Ноябрь 27, 2015, 15:18
Протокол таков, что инициатором входящего (ну и исходящего :)) потока является моя прога.

Про менеджера немного не понял, это типа при обмене с каждым из девайсов делать ДЕбинд для предыдущего и биндиться с нужным, и т.д. ??


Название: Re: UDP, несколько устройств и портов
Отправлено: Racheengel от Ноябрь 27, 2015, 23:28
Один сокет можно в одно и то же время соединить через bind только с одним хостом и портом.
Надо несколько - делаем по одному сокету на подключение.
Только скорее всего вам придется еще каждый объект в отдельном потоке обрабатывать, но это уже от частоты передачи данных зависит.


Название: Re: UDP, несколько устройств и портов
Отправлено: billidean от Ноябрь 28, 2015, 15:00
А если делать опрос по-очереди, то можно ли используя ОДИН сокет биндить его к разным адресам/портам в нужное время?
Т.е. поработали с одним адресом/портом, переключились на другой адрес/порт и т.д.
Или это не айс? Не в нормальном стиле?

UPD: подойдет ли такой вариант, если от всех устройств идут постоянные потоки данных? Не получится ли получение неполного пакета или коллизии?


Название: Re: UDP, несколько устройств и портов
Отправлено: Bepec от Ноябрь 29, 2015, 10:37
Вы страдаете херней )
Без знания вашего протокола конкретику сказать нельзя.
Но постоянные потоки данных могут идти только по РАЗНЫМ портам.


Название: Re: UDP, несколько устройств и портов
Отправлено: Racheengel от Ноябрь 29, 2015, 22:03
У вас каждый девайс это физическое устройство с отдельным IP адресом.
Что запрещает сделать по сокету на устройство?
Вернее, не так. Зачем извращаться с одним сокетом? Что это даст, кроме проблем?


Название: Re: UDP, несколько устройств и портов
Отправлено: billidean от Ноябрь 30, 2015, 08:35
Спасибо за советы.
Буду делать отдельные сокеты для устройств.


Название: Re: UDP, несколько устройств и портов
Отправлено: qate от Ноябрь 30, 2015, 12:59
1 Сокет на порт обмена командами + его обработчик события получения пакета
2 Сокет на порт обмена данными + его обработчик события получения пакета
При приходе пакета есть его источник
Плодить еще сокеты смысла не вижу


Название: Re: UDP, несколько устройств и портов
Отправлено: Bepec от Ноябрь 30, 2015, 14:07
Постоянные потоки данных.
Добавляем протокол - UDP с его негарантированной доставкой.
Эти слова меняют твою точку зрения, qate?


Название: Re: UDP, несколько устройств и портов
Отправлено: Racheengel от Ноябрь 30, 2015, 14:10
Если у нас есть N девайсов и каждое использует M портов, то нам надо N * M сокетов.
Что тут обсуждать?


Название: Re: UDP, несколько устройств и портов
Отправлено: qate от Ноябрь 30, 2015, 14:44
Постоянные потоки данных.
Добавляем протокол - UDP с его негарантированной доставкой.
Эти слова меняют твою точку зрения, qate?

как это может поменять мою точку зрения ?
у ТС железяка работает по UDP, разве чтото возможно иное без переделки железа ?


Название: Re: UDP, несколько устройств и портов
Отправлено: qate от Ноябрь 30, 2015, 14:46
Если у нас есть N девайсов и каждое использует M портов, то нам надо N * M сокетов.
Что тут обсуждать?

слушающих сокетов достаточно M на адрес 0.0.0.0 - что тут обсуждать ?


Название: Re: UDP, несколько устройств и портов
Отправлено: billidean от Декабрь 01, 2015, 06:11
Последний ответ очень интересен, с таким пока не встречался, поищу на этот счет чего-нибудь.


Название: Re: UDP, несколько устройств и портов
Отправлено: Bepec от Декабрь 01, 2015, 08:03
Могу обосновать - если идёт постоянный поток данных со всех устройств на один порт, возможно просто переполнение буфера и отбрасывание пакетов, что приводит к потере информации. UDP же безгарантийный протокол, если в своём протоколе не заложена доставка, то мы получаем возможную черную дыру при наращивании количества клиентов.

Но тут опять же надо смотреть на протокол ТСса, возможно ему подойдёт и вариант qate, но тут не угадаешь :)


Название: Re: UDP, несколько устройств и портов
Отправлено: Racheengel от Декабрь 01, 2015, 22:25
Если у нас есть N девайсов и каждое использует M портов, то нам надо N * M сокетов.
Что тут обсуждать?

слушающих сокетов достаточно M на адрес 0.0.0.0 - что тут обсуждать ?


У автора N физических устройств. У каждого отделый айпи. При чем тут адрес 0?


Название: Re: UDP, несколько устройств и портов
Отправлено: Hellraiser от Декабрь 02, 2015, 08:02
Адрес 0.0.0.0 - запуск на всех интерфейсах. Даже если будет 100500 устройств, все они будут подключены к одному сетевому интерфейсу и проблемным местом при непрерывной передаче данных будет не обработка внутри программы (при условии, что она реагирует на входящие с разумной скоростью), а сетевая инфраструктура - коммутаторы, сетевые адаптеры. Один простенький дешевый коммутатор, рассчитанный на нагрузку в домашней сети, сведет на нет всю обработку.