NSNetServiceBrowser просмотреть все типы услуг

Как я могу просматривать все сервисы независимо от их типа, используя Bonjour?

NSNetServiceBrowser может просматривать определенный тип сервировки - "_music._tcp". Пример кода:

NSNetServiceBrowser *serviceBrowser;

serviceBrowser = [[NSNetServiceBrowser alloc] init];
[serviceBrowser setDelegate:delegateObject];
[serviceBrowser searchForServicesOfType:@"_music._tcp" inDomain:@""];

С помощью этого кода я получаю все сервисы, которые имеют тип сервиса "_music._tcp". Для создания сервиса я использую приложение Network Beacon.

Но мне нужно найти все услуги независимо от их типа обслуживания. Ответ из этого поста - не помогает.

Когда я использую:

@"_services._dns-sd._udp."

вместо:

@"_music._tcp."

Я ничего не получаю.

Я начинающий программист на iOS - буду очень благодарен за помощь. Код, который я использовал из этой книги, глава 18.

Мой код: BonjourViewController.m

@implementation BonjourViewController

- (void)viewDidLoad
{
    [self browseServices];
    [super viewDidLoad];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.services count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath      *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier   forIndexPath:indexPath];

    if (!cell)
    {
       cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

   //--display the name of each service---
   cell.textLabel.text = [[self.services objectAtIndex:indexPath.row]name];

   return cell;
}

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing
{
   [self.services addObject:aNetService];
   _debug.text = [_debug.text stringByAppendingString:@"Found service. Resolving address ...\n"];
   [self resolveIPAddress:aNetService];
}

-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didRemoveService:   (NSNetService *)aNetService moreComing:(BOOL)moreComing
{
   [self.services removeObject:aNetService];
   _debug.text = [_debug.text stringByAppendingFormat:@"Removed:  %@\n", [aNetService hostName]];

   [self.tbView reloadData];
}

-(void)resolveIPAddress:(NSNetService *)service
{
   NSNetService *remoteService = service;
   remoteService.delegate = self;
   [remoteService resolveWithTimeout:10];
}

-(void)netServiceDidResolveAddress:(NSNetService *)sender
{
   NSData *address = nil;
   struct sockaddr_in *socketAddres = nil;
   NSString *ipString = nil;
   int port;

   for (int i=0; i<[[sender addresses] count];i++)
   {
      address = [[sender addresses] objectAtIndex: i];
      socketAddress = (struct sockaddr_in *) [address bytes];
      ipString = [NSString stringWithFormat:@"%s", inet_ntoa(socketAddres->sin_addr)];
      port = socketAddres->sin_port;
      _debug.text = [_debug.text stringByAppendingFormat:@"Resolved: %@-->%@:%u\n", [sender hostName], ipString, port];
   }
   [self.tbView reloadData];
}

-(void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict
{
   _debug.text = [_debug.text stringByAppendingFormat:@"Could not resolve:  %@\n", errorDict];
}

-(void)browseServices
{
   self.services = [[NSMutableArray alloc]init];
   self.browser = [[NSNetServiceBrowser alloc]init];
   self.browser.delegate = self;

   [self.browser searchForServicesOfType:@"_music._tcp." inDomain:@""];
} 

0 ответов

Другие вопросы по тегам