Это не типичный вопрос программирования, но я вижу, что это серьезное препятствие при тестировании вашего кода на основе Bonjour.
Bonjour поддерживает два механизма для информирования клиентов об их существовании: сначала многоадресные рассылки в локальной сети, затем DNS.
Многоадресные передачи просты в использовании, поскольку нет настроек, к сожалению, их можно использовать только в одной сети.
DNS может позволить себе работать через маршрутизаторы (Интернет), но для этого требуется правильно настроенный сервер имен и клиенты, использующие этот сервер имен.
Я думаю, у вас есть только два варианта.
- рекламируйте свою услугу Bonjour в сети WiFi
- настроить свой собственный DNS
В первом случае важно понимать, что услуга не обязательно должна рекламироваться вашим собственным приложением, работающим на Mac. Вы можете использовать утилиту dns-sd
для регистрации любого IP-адреса / порта в качестве службы Bonjour в сети. Чтобы это работало, вам нужен компьютер (Mac, Linux), который подключен к вашему WiFi, и запустите там dns-sd
аналогично этому:
dns-sd -P "Stack Overflow" _http._tcp . 80 stackoverflow.com 69.59.196.211
Это позволит зарегистрировать службу http с именем «Переполнение стека» в качестве службы Bonjour. Проверьте это - запустите его в терминале и проверьте его в закладках Safari в разделе Bonjour. Так же, как вы можете зарегистрировать свою заявку.
К сожалению, вам нужно запустить это на машине, подключенной к сети WiFi. Это означает, что ваше приложение Mac будет размещать рекламу в собственной сети Ethernet, dns-sd
- в сети WiFi.
Второй вариант немного пугающий, но это не имеет большого значения, если вы хотите испачкать руки администрацией.
Опять же, вам не нужно динамически регистрировать службы в DNS. Вы можете просто жестко закодировать имя вашего Mac и порт вашего приложения в конфигурации DNS. Это всего лишь 4 строки, которые необходимо добавить в файл зоны (файл конфигурации DNS).
b._dns-sd._udp IN PTR @ ; b = browse domain
lb._dns-sd._udp IN PTR @ ; lb = legacy browse domain
_icool._tcp PTR iCool\ App\ Service._http._tcp
iCool\ App\ Service._http._tcp SRV 0 0 8888 macpro.domain.com.
Первые две строки сообщают клиентам (в вашем случае, устройствам iOS), что Bonjour включен для этого домена. Третья строка сообщает клиентам, что доступна служба «Служба приложений iCool» типа icool
. Четвертая строка сообщает клиенту текущий адрес и порт услуги.
Клиенты будут искать записи DNS для своих настроенных (или полученных через DHCP) «Поиск доменов». Проверьте настройки сети.
Вы можете запустить nameserver на вашем Mac, на каком-нибудь компьютере с Linux или использовать такие службы, как dyndns.com.
Надеюсь, это поможет.