如何找到活动 AirPlay 设备的 IP 地址?
Posted
技术标签:
【中文标题】如何找到活动 AirPlay 设备的 IP 地址?【英文标题】:How to find the IP-address of the active AirPlay device? 【发布时间】:2012-04-11 07:50:34 【问题描述】:我想知道是否可以获取我的 ios 应用当前使用的播放设备的 IP 地址。
要么是那个,要么是网络上所有支持播放的设备的 IP 地址。
提前谢谢你!
编辑:虽然我现在有一个公认的答案,但我很想知道如何获取当前播放的播放设备的 IP。
【问题讨论】:
【参考方案1】:您必须使用 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
希望对你有帮助
【讨论】:
非常感谢!我会尽快尝试的。 似乎“_airplay._tcp”是此用途的正确协议。我还没有在实践中尝试过,但一旦我知道它有效,我会发布更新。 你会看到这很容易,如果你有任何问题,请说出来,我们会看到问题所在 是的,看起来很简单。我刚刚出轨,现在正在做一个不同的项目。当我最终实现它时,我会回来更新它。以上是关于如何找到活动 AirPlay 设备的 IP 地址?的主要内容,如果未能解决你的问题,请参考以下文章