Подтвердить что ты не робот

Android - Как измерить качество полосы пропускания в локальной сети одним телефоном

Наше приложение служит контроллером для наших устройств с поддержкой Wi-Fi. Иногда, когда трафик локальной сети ужасен, устройствам трудно получить команду, которую отправляет приложение контроллера. Если это произойдет, мы должны уведомить пользователя о том, что сетевой трафик ужасен, и попросить пользователя переключиться на другой маршрутизатор.

У нас есть сердцебиение с устройствами, которые мы будем контролировать. Однако проблема может возникнуть, даже не достигнув этой стадии. Я имею в виду, что, прежде всего, наше приложение должно искать устройства, отправив UDP-пакеты в адрес многоадресной рассылки. Затем, после получения ответа от этих устройств, мы создаем соединение между ними. Это время, когда мы можем получить сердцебиение. Проблема, о которой я говорю, даже на этапе поиска устройств, если сетевой трафик ужасен, наше устройство не сможет получать пакеты UDP, которые мы отправили.

До сих пор это были наши попытки:

  • Запуск http-сервера и клиента

Мы начали легкий HTTP-сервер, разместили там файл. Затем мы создаем клиент и загружаем этот файл и отслеживаем скорость. Но это, похоже, не работает, потому что есть петля. Устройство видит, что обе стороны (http-клиент и сервер) имеют одну и ту же зону (возможно, этот термин неверен), поэтому, возможно, загрузка не прошла даже через маршрутизатор.

  1. Интегрируйте iPerf в наше приложение:

Недостатком этого решения является то, что устройство должно быть внедрено. Но мы все же попробовали решение iPerf. Мы протестировали его как с клиентом, так и с сервером на одном устройстве. Но скорость все же не меняется. Если мы протестируем на двух устройствах: один, как сервер, другой как клиент, тогда мы получим хороший тест скорости. Однако мы не можем, как наш клиент, использовать два телефона для нашего продукта, и мы также не можем просить их укоренить их телефон.

  1. Использование библиотеки с открытым исходным кодом для проверки скорости соединения, предоставляемой Facebook.

Мы обнаружили libv с открытым исходным кодом в github, который проверяет качество скорости соединения. Однако для проверки скорости требуется подключение к Интернету. Но наш продукт не требует от пользователя подключения к Интернету. Пользователю просто нужен маршрутизатор и приложение. Поэтому, к сожалению, мы не можем использовать это решение.

  1. Пробовал искать, как отключить loopback при загрузке файла с того же устройства.

Основываясь на нашей первой попытке, которая является единственным решением, которое мы построили сами. мы попытались проверить документацию, если в любом случае отключить loopback при загрузке файла с того же устройства. К сожалению, мы не получили никакого хорошего результата.

Итак, наш вопрос:

  • Если наша первая попытка близка, то как мы можем отключить эту функцию loopback, чтобы мы могли правильно контролировать скорость загрузки?

  • Если наша первая попытка недостаточно хороша, тогда есть ли другой способ, который мы можем сделать, чтобы локально проверить пропускную способность?

Примечание. Не должно быть никакого интернет-соединения, и должно использоваться не более одного телефона.

Спасибо заранее!

4b9b3361

Ответ 2

Хотя это частичное решение, это может помочь проверить:

InetAddress.getByName(router).isReachable(timeOut)

Как объясняется здесь, он не всегда будет работать, но если он докажет, что это не сетевая проблема.

Также стоит приложить http и https-запрос к IP-адресу маршрутизатора, поскольку большинство коммерческих маршрутизаторов предоставляют веб-интерфейс.

Сравнение последующих откликов может помочь вам определить состояние сети.