2012-04-11 3 views
6

iOS 앱이 현재 사용중인 airplay 장치의 IP 주소를 가져올 수 있는지 궁금합니다.활성 AirPlay 장치의 IP 주소를 찾는 방법은 무엇입니까?

또는 네트워크상의 모든 공중 지원 장치의 IP 주소.

미리 감사드립니다.

EDIT : 이제 내가 받아 들인 대답을 얻었지만 현재 재생중인 airplay 장치의 IP를 얻는 방법을 알고 싶습니다.

답변

7

NSNetServiceBrowser를 사용하면 프로토콜을 사용하여 장치를 검색 할 수 있습니다. 그 후 http://developer.apple.com/library/mac/#qa/qa1312/_index.html

: 당신은 검색 할 프로토콜에 대한 @"_pdl-datastream._tcp"을 변경해야

_netServiceBrowser= [[NSNetServiceBrowser alloc] init]; 
    _netServiceBrowser.delegate= self; 
    [_netServiceBrowser searchForServicesOfType:@"_pdl-datastream._tcp" inDomain:@"local."]; 

, 여기 프로토콜의 목록을 찾을 수 있습니다 나는 프린터와 같은 한 한 내 코드처럼 보이는

#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]; 
} 

웹 유용 할 수 있습니다 : http://www.macresearch.org/cocoa-scientists-part-xxviii-bonjour-and-how-do-you-do

당신은 프로토콜의 기능을 작성해야3210

도움이되기를 바랍니다.

+0

감사합니다. 최대한 빨리 시도해 보겠습니다. – Nailer

+2

"_airplay._tcp"가이 용도로 올바른 프로토콜 인 것 같습니다. 아직 실전에서 사용해 보지 못했지만 작동이 확인되면 업데이트를 게시 할 것입니다. – Nailer

+0

U는 매우 쉽게 볼 수 있습니다. 문제가 있다고 말하면 무엇이 문제인지 알 수 있습니다. – Jpellat

관련 문제