Рубрики
Без рубрики

Автоматически обнаруживать и подключаться к устройствам в сети

Недавно в проекте университета сосредоточился на поисках лучшего способа для инвалидов, чтобы взаимодействовать … Теги с iOS, Swift, Python, учебником.

В последнее время в университетском проекте ориентирован на поиск лучшего способа для инвалидов, чтобы взаимодействовать с видеоиграми, нам нужно было подключить приложение iOS к ПК над локальной сетью. Обычно это будет простая задача, используя IP-адреса, возможно, через соответствующий сервер. Однако из-за ограничений проекта мы не смогли создать сервер для обработки этого, и пользователь не хочет быть введенным IP-адресами.

Нам нужен был еще один путь.

Первоначально мы смотрели на использование широковещательной/многоадресной передачей, однако это было проблематично на сложных сетях, таких как университет WiFi. Мы также смотрели на использование QR-кодов, звуков и многих других методов, но никто не совпадает с кратким; Простота для пользователя.

Zeroconf и Bonjour

Zeroconf – это группа технологий, направленных на упрощение открытия услуг по локальной сети – Bonjour, технология, выпущенная в 2007 году Apple, является одной из этих технологий.

Bonjour используется для определения размещения услуг, рекламируемых в сети, используя сервисные записи MDNS, и часто используется в принтерах (думают принтеры – при подключении принтера к сети, любое близкое устройство может затем использовать его с минимальной настройкой).

Введите обнаруживать

Bonjour был именно то, что мы искали, так как мы на самом деле используем его, чтобы поговорить с другим устройством?

В то время как для пользователя кажется одним, беспроблемным процессом, за кулисами используются два рамок Apple IOS:

  1. Фонд Рамки Предоставляет хорошие встроенные инструменты для открытия услуг Bonjour
  2. Сеть Рамки Дает прямой доступ к протоколам, таким как TLS, TCP и UDP, сверху, мы можем построить наш пользовательский сетевой протокол.

Мы используем эти рамки для Обнаружен Библиотека, построенная рядом из нас в проекте, чтобы аннотация в сети сетевой аспект для проекта. Мы решили открыть исходный код проекта, в основном потому, что мы думали, что это довольно круто ¯_ (ツ) _/¯.

Как мне на самом деле использовать это?

Хорошо, достаточно бессвязных. Этот учебник собирается сосредоточиться на стороне клиента (iOS), но вам все равно нужно что-то для подключения. Я собрал простой Python Server здесь , который мы будем использовать для тестирования.

Скачать . Xcode начал проект , который содержит базовую планировку раскадровки для приложения, с уже установленным обнаруженным.

(Заполненный исходный код для этого проекта можно найти здесь )

Теперь, если вы открыте ViewController.swift , импорт Обнаруживать и назначить переменную к новому экземпляру Обнаружен И другой, чтобы провести логическое значение, представляющее состояние соединения.

Создать новый Tabrupinsinside Ibaction для кнопки Connect в ViewController.swift и добавьте следующий код, чтобы переключить соединение. При отключении этот код сообщает обнаружено, чтобы начать поиск услуги в локальной сети с указанным именем и подключаться к данному порту.

@IBAction func toggleConnection(_ sender: Any) {
    if (!isConnected) {
        connectionService.discover(type: "_discoverable._udp", on: 1024)
    } else {
        connectionService.close()
    }
}

И это все, что нужно, чтобы найти сервер в сети и автоматически подключаться к нему. Если вы запустите сервер локально:

  1. CD в папку, содержащую Server.py.
  2. Убедитесь, что у вас есть Python 3 и Pip установлены
  3. Беги PIP Установить Zeroconf.
  4. Открыть Server.py В редакторе и установите переменную «Host» на IP-адрес вашего компьютера
  5. Бегать sudo python3 server.py. Чтобы запустить сервер

Затем запустите приложение iOS (либо в симуляторе или на реальном устройстве) и нажмите Connect. Теперь ничего не изменится в приложении iOS (поскольку мы еще не обновили пользовательский интерфейс), но если вы проверяете консоль Xcode или Server.py Вывод, вы увидите кучу журналов, связанных с отправляемыми сообщениями и полученными между двумя.

Теперь давайте подключимся к государственной публикации «Обнауриема», чтобы мы могли обновить UI, чтобы показать, что мы открыли новое соединение. Вернуться в ViewController.swift Добавьте следующий код, чтобы сделать ViewController соответствовать Открытый протокол.

`Swift расширение ViewController: Открытый файл {Func ConnectionState (штат: обнаружен. Состояние) {

}

func connectionStrength(strength: Float) {

}

} `

Внутри ConnectionState (штат: обнаружен. Состояние) Добавьте следующее утверждение выключателя.

быстрый Выключатель состояния { случай. Соответствие: По умолчанию: }

Намного больше вы можете сделать с состоянием соединения – например, показывающий индикатор соединения, когда соединение запускается или показывая сообщения об ошибках в случае сбоя подключения – но для этого примера это все, что нам нужно.

Наконец, чтобы подписаться на обновления, нам нужно установить Connectionservice Делегат в ViewController, так что он знает, где отправлять обновления. В ViewDidload Добавьте следующую строку. быстрый

Теперь мы можем подключить и отключить к серверу, но давайте обновим пользовательский интерфейс, чтобы сообщить пользователю. Обновление ConnectionState (штат: обнаружен. Состояние) со следующим кодом. Свифт FUNC ConnectionState (штат: обнаружен. Состояние) { Dispatchqueue.main.async { Выключатель состояния { Случай. Соответствие: self.connectbutton.settitle («Отключить», для: .NOMMAL) По умолчанию: self.connectbutton.settitle ("Connect", для: .NOMMAL) } } }

Кнопка CONNECT теперь обновится, чтобы показать состояние подключения. Теперь давайте на самом деле отправим некоторые данные на сервер. Добавить ibaction на Tabrupinsinside Для кнопки отправки, которая получает содержимое текстового поля и отправляет его на сервер: `Swift @Ibaction Func Отправить (_ отправителя: любой) { Guard (TextField.text) еще { вернуть }

connectionService.send(textField.text!)

} `

Вот и все! Если вы введете несколько текстов в поле, и проверьте журналы сервера, вы увидите, что ваш вход был принят сервером (если все работало правильно).

Это очень простой пример, но показывает основные принципы открытия и использования обнаруженного соединения.

Оригинал: “https://dev.to/benmechen/automatically-discover-and-connect-to-devices-on-a-network-3265”