Я написал код в своем приложении, чтобы включить Wi-Fi-соединение между устройствами (передача только текста / строки). Код такой же, как в примере Apple Witap Приложение, которое загружается из Developer.Apple. ком.
Хорошо работает в моей сети, а также в других сетях.
Однако на моем клиентском сайте это не работает.
Я провел время на сайте Клиента, чтобы решить проблему с устройствами, которые не общаются друг с другом, и это то, что я обнаружил. Они в своей настройке безопасности блокируют одноранговую связь… », и моя связь с устройством идентифицируется как одноранговая.
Есть ли способ решить эту проблему
Есть ли что-нибудь кроме Wi-Fi связи PEER 2 PEER, которую поддерживает Apple?
Прототип WIFI-приложений Рабочие понятия
В приложении WiFi в основном четыре класса, называемых AppController, Picker, BrowserViewController, TCP Server.
При загрузке приложения класс AppController будет инициализировать NSInputStraem и NSOutPut Stream.
А также он вызовет метод start из класса TcpServer для установки номера порта.
После того, как он вызовет метод enableBounjourWithDomain из класса TcpServer.
Вышеупомянутый вызов метода с параметром, называемым идентификатором (это общее имя, например: WiTap), и отправитель ищет устройства с этим общим идентификатором.
После выполнения этого метода устройство отправителя может идентифицировать наше устройство и может подключиться.
Получение собственного имени устройства
Tcp serverServer делегат «DidEnabledBounjer» будет работать после выполнения вышеуказанного кода и даст текущее имя устройства.
Затем делегат NSNetservice «didFindService» будет работать (он будет работать при обнаружении каждой службы) и извлекать имя обнаруженной службы.
После получения нового имени службы мы проверим, совпадает ли оно с именем нашего устройства, которое мы получили от делегата DidEnabledBounjer.
в противном случае имя новой службы будет добавлено в массив NSMutable, называемый службами.
Затем массив сервисов привязывается к представлению Table, и мы можем увидеть список обнаруженных имен устройств.
обнаружение новых устройств:
Нет настроек таймера для обнаружения новых устройств.
Когда новое устройство подключено к той же сети WiFi, делегат «DidFindservice» сработает (это делегат NSNetservice, реализованный в классе BrowserViewController).
DidFindservice даст новое имя устройства. После его получения мы проверим, совпадает ли оно с именем нашего устройства, которое мы получили от делегата «DidEnabledBounjer».
в противном случае имя службы будет добавлено в массив NSMutable с именем services.
Затем отсортируйте все обнаруженные имена устройств в соответствии с именем устройства и перезагрузите табличное представление.
Работа после выбора имени устройства в табличном представлении
После нажатия на имя устройства в TableView оно вызовет делегат didSelectRowAtIndexPath, который реализован в классе BrowserViewController (это делегат класса TableView).
Он выберет имя NetService из нашего массива сервисов (содержит все обнаруженные сервисы) в соответствии с индексом TableView и установит результирующий NSService в качестве Текущего сервиса.
Запустить делегат didResolveInstance, и он установит значения InPutStream и OutPutStream.
После получения значений для InPutStream и OutPutStream будет вызван метод «OpenStream» для открытия потоков ввода и вывода.
Наконец, он освобождает объекты NSService и Picker и готов к отправке сообщений с выбранных устройств.
Рабочая кнопка отправки
Вызовите функцию «отправить» из BrowserViКласс ewController со строковым параметром. Это может быть ввод текста пользователем или сгенерированная строка после распознавания речи.
Преобразовать входную строку в тип данных uint_8 и отправить ее на приемное устройство.
Работа со стороны приемника
Когда данные поступают на приемное устройство, запускается делегат «TcpServerAcceptCallBack» (реализован в классе TcpServer).
Он будет вызывать метод DidAcceptConnectionForServer из запроса BrowserViewControll через другого делегата класса TcpServer с именем «HandleNewConnectionFromAddress».
Запустите «делегат дескриптора потока», который находится в классе «AppController», и он проверит, есть ли укусы или нет.
Если доступны байты, преобразуйте данные типа uint_8 в строку, и мы отобразим результирующую строку в текстовом поле получателя.
А также загрузка изображений и отображение их в представлении изображений из AppBundle с использованием результирующей строки.