NSNetService говорит, что это опубликовано, но это не видно в сети - PullRequest
0 голосов
/ 12 апреля 2020

Я работаю над небольшим iOS приложением для собственного использования (по крайней мере, изначально), и я подумал, что буду использовать Bonjour для настройки сети между двумя iOS устройствами. Интерфейс моего сервера определяет

NSNetService *netService;

, и реализация использует следующий код для объявления о его существовании:

const NSString *kSEBonjourServiceDomain = @"";      //use defaults
const NSString *kSEBonjourServiceName = @"_test._tcp.";

//...

netService = [[NSNetService alloc] initWithDomain:(NSString *)kSEBonjourServiceDomain type:(NSString *)kSEBonjourServiceName name:@"" port:sin.sin_port];
if (netService)
    {
    netService.delegate = self;
    netService.includesPeerToPeer = YES;
    [netService publish];
    }
else NSLog(@"Failed to create NSNetService");

Когда я запускаю сервер, мой объект NSNetService вызывает -netServiceDidPubli sh: метод делегата, но когда я использую Discovery для просмотра бесплатных сервисов в моей сети, мой сервис не появляется. Помимо константных строк, этот код аналогичен некоторому коду в одном из моих приложений Ma c (работает должным образом), а также очень похож на пример кода Apple. Я просмотрел все параметры на вкладке возможностей XCode на случай, если мне нужно что-то добавить, но я не вижу ничего релевантного. Я также прочитал кучу документов и учебных пособий, в которых не упоминается о необходимости делать что-то большее, но я не удивлюсь, узнав, что это работает только на iOS, если вы установите непонятную настройку сборки на Строка, о которой вы должны были узнать, прочитав Руководство по интерфейсу пользователя для watchOS в сентябре прошлого года. Итак, кто-нибудь может просветить меня? Что мне не хватает? Заранее спасибо!

1 Ответ

0 голосов
/ 14 апреля 2020

Оказалось, что из-за глупой ошибки в другом месте моего кода sin.sin_port был установлен в 0 к моменту регистрации моего NSNetService. Хотя NSNetService не видит в этом проблемы, она вызывала игнорирование службы браузерами служб. Таким образом, ответ: служба с портом 0 будет регистрироваться без ошибок, но не будет работать. Спасибо Gaige за помощь.

...