Những gì bạn phải sử dụng là NSNetServiceBrowser để thực hiện tìm kiếm các thiết bị có giao thức. Tôi đã làm điều tương tự với máy in, mã của tôi trông giống như:
_netServiceBrowser= [[NSNetServiceBrowser alloc] init];
_netServiceBrowser.delegate= self;
[_netServiceBrowser searchForServicesOfType:@"_pdl-datastream._tcp" inDomain:@"local."];
Bạn phải thay đổi @"_pdl-datastream._tcp"
cho giao thức bạn muốn tìm kiếm, bạn có thể tìm thấy một danh sách các giao thức ở đây: http://developer.apple.com/library/mac/#qa/qa1312/_index.html
Sau đó bạn phải viết các chức năng của giao thức:
#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];
}
Một trang web có thể hữu ích: http://www.macresearch.org/cocoa-scientists-part-xxviii-bonjour-and-how-do-you-do
Tôi hy vọng nó sẽ giúp bạn
Cảm ơn bạn! Tôi sẽ thử nó càng sớm càng tốt. – Nailer
Có vẻ như "_airplay._tcp" là giao thức chính xác cho việc sử dụng này. Tôi chưa thử nó trong thực tế, nhưng tôi sẽ đăng một bản cập nhật khi tôi biết nó hoạt động. – Nailer
U sẽ thấy nó rất dễ dàng, nếu bạn có bất kỳ vấn đề nói nó và chúng tôi thấy những gì vấn đề – Jpellat