jeudi 13 août 2015

nsnetservicebrowser not finding nearby devices with some routers

I am developing a 3D Wi-Fi multiplayer game for iPhone and iPad without using any game engine. In my game, the list of nearby devices is displayed to user (present on same local Wi-Fi network).To find devices I am using nsnetservicebrowser class.

I found that the list is not showing or takes a lot of time to show nearby devices even if it is present on the same Wi-Fi network. Sometimes the devices name appears on the list even if it is not available on the network. I found that the issue happens with my ADSL router (Wireless N), but when I use ethernet router (Wireless G) or mobile hotspot (created from my Android device), then the list shows the nearby devices and updates properly.

I have two questions:

  1. Is this issue router specific? If yes, what kind of router settings can cause such issue?
  2. Are there any changes in the code required to make it work with all kind of routers?

I’d appreciate any suggestions on this issue. Thank you in advance.

Code snippets: 1. To search for nsnetservice

-(BOOL)searchForServicesOfType:(NSString *)type inDomain:(NSString *)domain {
    [self stopCurrentResolve];
    [self.netServiceBrowser stop];
    [self.services removeAllObjects];
    NSNetServiceBrowser *aNetServiceBrowser = [[NSNetServiceBrowser alloc] init];
    if(!aNetServiceBrowser) {
        return NO;
    }
    aNetServiceBrowser.delegate = self;
    self.netServiceBrowser = aNetServiceBrowser;
    [aNetServiceBrowser release];
        [self.netServiceBrowser searchForServicesOfType:type inDomain:domain];
    [self.tableView reloadData];
    return YES;
}

  1. To publish nsnetservice

    self.netService = [[NSNetService alloc] initWithDomain:domain type:protocol 
    
    name:name port:self.port];
    
    
    if(self.netService == nil)
    
       return NO;
    
    [self.netService scheduleInRunLoop:[NSRunLoop currentRunLoop] 
    forMode:NSRunLoopCommonModes];
    
        [self.netService publish];
    
        [self.netService setDelegate:self];
    
        return YES;
    
    


via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire