NSNetServiceBrowser не находит существующие сервисы

У меня есть собственный сервер и клиент Cocoa (OSX), и сервер публикует услугу Bonjour. У меня есть клиент, который ищет сервер, используя NSNetServiceBrowser, но я никогда не получаю никаких результатов. Я знаю, что сервис публикуется, потому что он находится на выходе mdns -B _myservicetype._tcp, Мой код поиска и публикации выполняет поиск и публикацию с одним и тем же доменом, именем и типом и практически идентичен примеру кода Apple. Вот код публикации:

service = [[NSNetService alloc] initWithDomain:@"" type:@"_scijs._tcp" name:@"ScienceJeopardyServer" port:4567];
[service publish];

А вот методы поиска и делегирования:

[sbrows setDelegate:self];
[sbrows searchForServicesOfType:@"_scijs._tcp" inDomain:@""];

И вот методы делегата:

-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser {
    [self.statusLabel setStringValue:@"Searching for server..."];
    [self.serverIndicator setHidden:NO];
    [self.serverIndicator startAnimation:self];
}

-(void)netServiceBrowser:aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict {
    [self.statusLabel setStringValue:@"Error finding server."];
    [self.serverIndicator stopAnimation:self];
    [self.serverIndicator setHidden:YES];
}

-(void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser {
    [self.serverIndicator stopAnimation:self];
    [self.serverIndicator setHidden:YES];
}

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing {
    [aNetServiceBrowser stop];
    NSLog(@"Found server.");
    [self.statusLabel setStringValue:@"Resolving service..."];
    [aNetService setDelegate:self];
    [aNetService resolveWithTimeout:10.0];
}

Большинство из них - просто код GUI и NSLogs, но я никогда не получаю изменения графического интерфейса или NSLogs. у кого-нибудь есть решение?

1 ответ

Решение

Скорее всего, это в вашем клиенте.

  1. Установите точки останова в методах делегата.
  2. Удостовериться sbrows не выходит за рамки. Если он выпадает из области видимости, вызывается willSearch, то никаких других ответов.
Другие вопросы по тегам