6

iOS アプリが現在使用しているエアプレイ デバイスの IP アドレスを取得できるかどうか疑問に思っています。

それか、ネットワーク上のすべてのエアプレイ対応デバイスの IP アドレスのいずれかです。

前もって感謝します!

編集: 受け入れられた回答が得られましたが、現在再生中のエアプレイ デバイスの IP を取得する方法に興味があります。

4

1 に答える 1

7

使用する必要があるのは、プロトコルを使用してデバイスを検索するためのNSNetServiceBrowserです。私はプリンターでも同じことをしました、私のコードは次のようになります:

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

@"_pdl-datastream._tcp"検索するプロトコルを変更する必要があります。プロトコルのリストはここにあります:http: //developer.apple.com/library/mac/#qa/qa1312/_index.html

その後、プロトコルの関数を作成する必要があります。

#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

お役に立てば幸いです

于 2012-04-11T09:34:55.590 に答える