В последнее время в университетском проекте ориентирован на поиск лучшего способа для инвалидов, чтобы взаимодействовать с видеоиграми, нам нужно было подключить приложение iOS к ПК над локальной сетью. Обычно это будет простая задача, используя IP-адреса, возможно, через соответствующий сервер. Однако из-за ограничений проекта мы не смогли создать сервер для обработки этого, и пользователь не хочет быть введенным IP-адресами.
Нам нужен был еще один путь.
Первоначально мы смотрели на использование широковещательной/многоадресной передачей, однако это было проблематично на сложных сетях, таких как университет WiFi. Мы также смотрели на использование QR-кодов, звуков и многих других методов, но никто не совпадает с кратким; Простота для пользователя.
Zeroconf и Bonjour
Zeroconf – это группа технологий, направленных на упрощение открытия услуг по локальной сети – Bonjour, технология, выпущенная в 2007 году Apple, является одной из этих технологий.
Bonjour используется для определения размещения услуг, рекламируемых в сети, используя сервисные записи MDNS, и часто используется в принтерах (думают принтеры – при подключении принтера к сети, любое близкое устройство может затем использовать его с минимальной настройкой).
Введите обнаруживать
Bonjour был именно то, что мы искали, так как мы на самом деле используем его, чтобы поговорить с другим устройством?
В то время как для пользователя кажется одним, беспроблемным процессом, за кулисами используются два рамок Apple IOS:
- Фонд Рамки Предоставляет хорошие встроенные инструменты для открытия услуг Bonjour
- Сеть Рамки Дает прямой доступ к протоколам, таким как 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() } }
И это все, что нужно, чтобы найти сервер в сети и автоматически подключаться к нему. Если вы запустите сервер локально:
CD
в папку, содержащуюServer.py.
- Убедитесь, что у вас есть Python 3 и Pip установлены
- Беги
PIP Установить Zeroconf.
- Открыть
Server.py
В редакторе и установите переменную «Host» на IP-адрес вашего компьютера - Бегать
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”