如何找到活动 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 地址?的主要内容,如果未能解决你的问题,请参考以下文章

在Android上检测wifi IP地址?

Android 如何从设备中查找动态 IP? [复制]

如何连接打印机设备

如何在airplay中区分apple tv和其他设备?

将 iOS 设备变成 AirPlay 扬声器

如何在 Dart/Flutter 中获取设备 IP