2012-11-11 5 views
1

J'ai un client et un serveur Cocoa (OSX) personnalisé, et le serveur publie un service bonjour. J'ai le client recherchant le serveur en utilisant NSNetServiceBrowser, mais je n'obtiens jamais aucun résultat. Je sais que le service est publié car il est dans la sortie de mdns -B _myservicetype._tcp. Mon code de recherche et de publication recherche et publie avec le même domaine, nom et type, et est presque identique à l'exemple de code Apple. Voici le code d'édition:NSNetServiceBrowser ne trouve pas les services qui existent

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

Et voici la recherche et les méthodes délégué:

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

Et voici les méthodes de délégués:

-(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]; 
} 

La plupart de c'est juste le code GUI et NSLogs, Pourtant, je ne reçois jamais les changements GUI ou les NSLogs. Quelqu'un a-t-il une solution?

Répondre

2

Les chances sont sur chez votre client.

  1. Définissez des points d'arrêt dans les méthodes déléguées.
  2. Assurez-vous que sbrows ne tombe pas hors de la portée. Si elle tombe hors de la portée willSearch est appelée alors aucune autre réponse.
+0

Merci beaucoup, s'est avéré être un problème ARC subtil avec la portée. +1 et acceptez! – Linuxios

+0

Alors, comment avez-vous résolu cela? J'ai le même problème. –

Questions connexes