2012-04-11 27 views
6

Tôi tự hỏi liệu có thể lấy địa chỉ IP của thiết bị phát sóng mà ứng dụng iOS của tôi hiện đang sử dụng hay không.Cách tìm địa chỉ IP của thiết bị AirPlay đang hoạt động?

Hoặc là, hoặc địa chỉ IP của tất cả các thiết bị có khả năng phát sóng trên mạng.

Cảm ơn bạn trước!

EDIT: Mặc dù bây giờ tôi có một câu trả lời được chấp nhận, tôi quan tâm đến việc biết cách nhận IP của thiết bị phát sóng hiện đang phát.

Trả lời

7

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

+0

Cảm ơn bạn! Tôi sẽ thử nó càng sớm càng tốt. – Nailer

+2

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

+0

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

Các vấn đề liên quan