Пропадали кадры по UDPC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Пропадали кадры по UDP

Сообщение Anonymous »

это мой первый «вопрос», надеюсь, я сделаю это правильно :)

Я экспериментирую с сетевым программированием и, в частности, хочу транслировать данные с одного компьютера на другие >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
довольно плохо для нового маршрутизатора в выделенной сети всего с тремя клиентами, не так ли? Маршрутизатор рекламируется как очень быстрый Wi-Fi-маршрутизатор с производительностью в три раза выше, чем у маршрутизаторов 802.11n.

Сравните его со значениями, которые я получаю от более старого маршрутизатора, находящегося в той же комнате и подключенного к нему около 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
Мне интересно, есть ли у кого-нибудь советы о том, что тестировать, подсказки о том, как добиться «надежного» UDP-соединения между этими машинами через Wi-Fi. Под надежностью я подразумеваю, что можно отбросить 2 последовательных пакета, но не более.

Спасибо.

Изменить

Похоже, что маршрутизатор (?) отправляет пакеты пакетами. Я измеряю время, которое проходит между получением двух датаграмм на клиенте, и это значение составляет около 3 мс для последовательности из ~ 10 пакетов, а затем около 300 мс для следующего пакета. Думаю, мои проблемы на клиенте больше связаны с вот этим несоответствием интервалов между кадрами, а не с пропущенными кадрами. Вероятно, мне просто нужна очередь и задержка >300 мс по отношению к серверу.

Подробнее здесь: https://stackoverflow.com/questions/256 ... s-over-udp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»