Я экспериментирую с сетевым программированием и, в частности, хочу транслировать данные с одного компьютера на другие >10 устройств с использованием UDP по беспроводной сети. Данные поступают пакетами размером около 300 байт и со скоростью около 30 кадров в секунду, т. е. по одному каждые ~33 мс.
Моя реализация основана на примере qt: http://qt-project.org/doc/qt-4.8/networ ... eiver.html
Я тестирую приложение только с одним клиентом и испытываю довольно много пропущенных кадров, не совсем понимаю, почему. Все работает нормально, если я использую кабели Ethernet. Я надеюсь, что кто-нибудь здесь поможет мне найти причину.
Я могу обнаружить пропущенные кадры, потому что пакеты содержат метку времени: после того, как я получу одну дейтаграмму, я могу проверить разницу между ее меткой времени и последней полученной, если она больше, чем, например, 50 мс, это означает, что я потерял один пакет в пути.
Это происходит довольно часто, даже несмотря на то, что у меня есть выделенная сеть Wi-Fi (не подключенная к Интернету и к только что купленному маршрутизатору подключено всего 3 машины). В большинстве случаев я отбрасываю один или два пакета, что не является проблемой, но иногда разница между временными метками предполагает, что потеряно более 30 пакетов, что не очень хорошо для того, чего я пытаюсь достичь.
Когда я пингую с одной машины на другую, я получаю следующие значения:
Код: Выделить всё
50 packets transmitted, 50 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.244/91.405/508.959/119.074 ms
Сравните его со значениями, которые я получаю от более старого маршрутизатора, находящегося в той же комнате и подключенного к нему около 10 компьютеров в рабочее время:
Код: Выделить всё
39 packets transmitted, 39 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.458/47.297/142.201/37.186 ms
Одну вещь, которую я не могу объяснить, это то, что если я пингую во время работы моего клиентского/серверного приложения UDP, статистика улучшается:
Код: Выделить всё
55 packets transmitted, 55 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.164/6.174/197.962/26.181 ms
Спасибо.
Изменить
Похоже, что маршрутизатор (?) отправляет пакеты пакетами. Я измеряю время, которое проходит между получением двух датаграмм на клиенте, и это значение составляет около 3 мс для последовательности из ~ 10 пакетов, а затем около 300 мс для следующего пакета. Думаю, мои проблемы на клиенте больше связаны с вот этим несоответствием интервалов между кадрами, а не с пропущенными кадрами. Вероятно, мне просто нужна очередь и задержка >300 мс по отношению к серверу.
Подробнее здесь: https://stackoverflow.com/questions/256 ... s-over-udp
Мобильная версия