У меня есть пара приложений gnuradio, которые общаются через Интернет. Потоковые графики довольно сложны, поэтому я свел их к простейшей форме, чтобы воссоздать проблему, которую я вижу.
Проблема в том, что, когда я вызываю клиента, он подключается к серверу, как и ожидалось, но сразу генерирует исключение «Значение nan не может быть представлено в целевом целевом типе» и, похоже, происходит из приемного блока wavfile. ,
Я упростил сервер до простой диаграммы тонов набора, которая представляет сигнал тонального набора на порту TCP. Клиент может подключиться к этому порту и ожидать получения сигнала вызова.
Если я запускаю клиент и сервер на одном компьютере и подключаюсь с помощью localhost, клиент подключается нормально и работает как положено. Однако, если клиент и сервер разделены на расстоянии (через Интернет), я получаю исключение nan каждый раз.
Теория:
- Возможно, клиент запускается и не получает данные достаточно быстро (время соединения + задержка 20 мс), а блок wavfile получает NaN из PDU сокета или потока в помеченный блок потока?
- Возможно, данные искажаются, когда они попадают в Интернет таким образом, что пакеты не приходят ожидаемым образом - фрагментация? Я пробовал MTU 512, но проблема все еще существует. Trued MTU 10000: тот же результат.
- Возможно, я упускаю из виду простую ошибку использования / синтаксиса при построении моего потокового графа
- В приемнике wavfile есть ошибка, и она должна изящнее обрабатывать отсутствие данных.
ОБНОВЛЕНИЕ 1:
Зарегистрировано сообщение об ошибке в проекте gnuradio https://github.com/gnuradio/gnuradio/issues/1763
ОБНОВЛЕНИЕ 2:
Блок сокета PDU, кажется, играет важную роль. Если я настрою параметр длины пакета потока в помеченный блок потока вместе с параметром MTU блока сокета PDU, я могу получить либо безошибочный поток с отброшенными пакетами (низкий MTU), либо мертвый поток с исключением NaN (высокий MTU) ).
Блок-схема сервера
Блок-схема клиента (XYZ.com, конечно, не мой настоящий IP)
WAV результат через Интернет (задержка 20-100 мс)
Этот wav-файл имеет размер 1 КБ и усекается, вероятно, одновременно с исключением, но точно сказать сложно.
WAV результат через локальный интерфейс (1 мс или меньше задержки)
Через локальный интерфейс клиент работает счастливо, пока я не остановлю его. Полученный сигнал соответствует ожидаемому.
Одна небольшая вещь - заметить глючные первые несколько образцов? Не уверен, что это фактор. Возможно нет. Но данные являются ненужными в течение первых 10 мс или даже через локальный интерфейс.