Здравствуйте, Tom, Вы писали:
Tom>Потеря пакетов — нормальное поведение UDP протокола, кроме потери они могут приходить в не правильном порядки, или вообще не приходить. Бороться с этим можно тольк она уровне своего собственного протокола.
Согласен(+), можно сколько угодно с пеной у рта доказывать, что при тестах пакеты не терялись, и что они практически никогда не теряются, но это не даст, тем не менее, совершенно никакой гарантии, что пакеты не будут теряться в дальнейшем или при изменении конфигурации системы/модели.
От себя добавлю, что это решается либо действительно написанием своего, хотя бы базового, протокола обмена, либо не решается вообще, как при обычном аудио-видео-вещании(т.е. потерялось, и хрен с ним, главное, контроль целостности кадров — пришел целый — показали, пришел битый — пропустили).
по поводу базовых протоколов можешь поискать например описание старых UDP-протоколов ICQ(до версии 5 включительно) — в инете эта инфа есть. у них там реализован несложный контроль очереди пакетов и механизм повторного запроса.
есть варианты и попроще. взять к примеру за основу TOC-протокол (используется как база в свежих версиях ICQ, AOL-messenger, Jabber кажется тоже, и т.п.). протокол открыт и прост, поэтому инфы навалом. в его случае, чтобы не заморачиваться с очередью всех подряд пакетов, можно просто создать пакетное окно и контролировать очередность пакетов в пределах окна, если нарушена, перезапросить все окно.
но меня смущает упоминание мультикаста в первом вопросе ветки... с этим сложнее. ведь каждому клиенту делать контроль передачи — потеряется скоростное преимущество мультикаста....
может все-таки решить это через TCP-сервер?
например, сервер принимает данные(откуда он их там берет), и укладывает в самораздувающийся буффер(любая реализация memory-stream, или доработанный FIFO-buffer), а подключенные клиенты фактически забирают данные уже из этого буффера. Суть — за счет длины буффера клиент может спокойно запросить передачу поврежденных пакетов повторно, без необходимости резервировать кучу памяти под контроль очереди для каждого клиента. как идейка?
если клиентов не больше пары сотен, то средняя машина должна потянуть. накрайняк попробовать реализовать это под QNX или подобной RTOS.