Запись и воспроизведение UDP-пакетов с синхронизацией

58
7

Мне нужно реализовать способ записи потока UDP с целью последующего воспроизведения этого потока по запросу. Эта запись и повтор должны использовать один и тот же тайм-аут (до разумного разрешения, вряд ли воспринимаемого человеком-пользователем, допустим, 10 мс): если исходный поток имел данные за секунды 00:00 до 00:35, затем отключился до 00: 55, а затем отправил больше данных с 00:55 до 01:34, тот же самый дистрибутив должен наблюдаться, когда мое приложение повторяет этот поток.

Если бы это было просто вопрос сохранения потока udp на диск, а затем повторного воспроизведения, без этого времени, было бы тривиально использовать Socket, NetworkStream или UdpClient. Проблема в том, что я не могу обойти, чтобы разработать способ изменения стандартного алгоритма получения, чтобы включить это время таким образом, чтобы он как-то легко переиграл позже алгоритм отправки. В качестве бонуса также должен поддерживаться способ запуска повтора в любой момент времени (с 00:15 по, например).

1) Есть ли способ легко реализовать эту функциональность на С#? У нас нет каких-либо серьезных нефункциональных требований для этого, нам просто нужно просто работать. Любой намек на способ его реализации был бы очень оценен.

2) Если это действительно не так просто, и кто-то предлагает использовать какой-либо сторонний компонент для этого, требования должны состоять в том, чтобы он имел API для С# (или способ управления компонентом из кода) и, надеюсь, быть открытым или свободно используемым программным обеспечением.

Большое спасибо.

спросил(а) 2020-04-04T01:15:04+03:00 6 месяцев, 3 недели назад
1
Решение
57

Это не совсем обычная функция С#. Но я попытаюсь сделать домашнее задание.

Способ, которым я должен был атаковать, - это сохранить пакеты на диск. Создайте настраиваемую файловую структуру в двоичном формате, удерживая данные о времени приема дейтаграммы, а затем самой дейтаграмме UDP. Затем вы можете запустить программу для чтения этого файла. Узнайте, в какое время была доставлена полезная нагрузка UDP. Это даст вам то, что вам нужно, чтобы воспроизвести пакеты и сохранить их для последующего воспроизведения со всем собственным кодом С#, без сторонних модулей. Разумеется, это потребует от вас записи в/из файла и возможности разбора соответствующих данных на типизированные объекты в С# (Timespan, возможно байт [] для датаграммы и т.д.). Все эти решения будут решать вам, писатель программы.

Долгое и короткое из них - я на 99% уверен, что нет никаких встроенных функций для такого рода требований. Это именно то, почему существуют языки программирования. Поэтому мы, как программисты, можем создавать удивительные решения для наших клиентов/клиентов/Учителей;)

ответил(а) 2020-04-04T01:29:10.094160+03:00 6 месяцев, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема