Bonjour is the ingenious technology, originated at Apple and now becoming a universal standard, for allowing network devices to advertise services they provide and to discover dynamically other devices offering such services. Once an appropriate service is detected, a client device can resolve it to get a network address and can then begin communicating with the server device. Actually communicating is outside the scope of this book, but device discovery via Bonjour is easy.
In this example, we’ll look to see whether any device, such as a Mac, is running iTunes with library sharing turned on. We can search for domains or for a particular service; here, we’ll pass the empty string as the domain to signify “any domain,” and concentrate on the service, which is
@"_daap._tcp". We maintain two instance variables, the NSNetServiceBrowser that will look for devices, and a mutable array in which to store any services it discovers:
self.services = [NSMutableArray array]; NSNetServiceBrowser* browser = [[NSNetServiceBrowser alloc] init]; self.nsb = browser; [browser release]; self.nsb.delegate = self; [self.nsb searchForServicesOfType:@"_daap._tcp" inDomain:@""];
The NSNetServiceBrowser is now searching for devices advertising iTunes sharing and will keep doing so until we destroy it or tell it to
stop. It is common to leave the service browser running, because devices can come and go very readily. As they do, the service browser’s delegate will be informed. For purposes of this example, ...