Название: 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 устройств, все они будут подключены к одному сетевому интерфейсу и проблемным местом при непрерывной передаче данных будет не обработка внутри программы (при условии, что она реагирует на входящие с разумной скоростью), а сетевая инфраструктура - коммутаторы, сетевые адаптеры. Один простенький дешевый коммутатор, рассчитанный на нагрузку в домашней сети, сведет на нет всю обработку.
|