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:@""];
}