Quello che devi utilizzare è NSNetServiceBrowser per eseguire una ricerca dei dispositivi con il protocollo. Ho fatto la stessa cosa con le stampanti, il mio codice è simile:
_netServiceBrowser= [[NSNetServiceBrowser alloc] init];
_netServiceBrowser.delegate= self;
[_netServiceBrowser searchForServicesOfType:@"_pdl-datastream._tcp" inDomain:@"local."];
Devi cambiare @"_pdl-datastream._tcp"
per il protocollo che si desidera effettuare la ricerca, è possibile trovare un elenco dei protocolli qui: http://developer.apple.com/library/mac/#qa/qa1312/_index.html
Dopo di che dovete scrivere le funzioni del protocollo:
#pragma mark - NSNetServiceBrowserDelegate
-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser{
//prepare the start of the search
}
-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing{
//Find a service, remember that after that you have to resolve the service to know the address
[_printers addObject:aNetService];
aNetService.delegate=self;
[aNetService resolveWithTimeout:5.0];
//More coming says if it has find more services, in case of more service are in queue wait to reload your interface
if (!moreComing) {
[self.tableView reloadData];
}
}
-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didNotSearch:(NSDictionary *)errorDict{
//Do what you want in case of error
}
-(void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)aNetServiceBrowser{
//End search!
}
- (NSString *)getStringFromAddressData:(NSData *)dataIn {
//Function to parse address from NSData
struct sockaddr_in *socketAddress = nil;
NSString *ipString = nil;
socketAddress = (struct sockaddr_in *)[dataIn bytes];
ipString = [NSString stringWithFormat: @"%s",
inet_ntoa(socketAddress->sin_addr)]; ///problem here
return ipString;
}
- (void)netServiceDidResolveAddress:(NSNetService *)sender
{
//delegate of NSNetService resolution process
[_addresses addObject:[self getStringFromAddressData:[sender.addresses objectAtIndex:0]]];
[self.tableView reloadData];
}
Una rete che può essere utile: http://www.macresearch.org/cocoa-scientists-part-xxviii-bonjour-and-how-do-you-do
Spero che ti sia d'aiuto
Grazie mille! Lo proverò APPENA POSSIBILE. – Nailer
Sembra che "_airplay._tcp" sia il protocollo corretto per questo uso. Devo ancora provarlo nella pratica, ma invierò un aggiornamento una volta che so che funziona. – Nailer
Vedrai che è molto facile, se hai qualche problema a dirlo e vediamo qual è il problema – Jpellat