首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNetService问题

NSNetService问题
EN

Stack Overflow用户
提问于 2011-05-29 12:57:37
回答 1查看 3.4K关注 0票数 0

我正试图在iOS设备和Mac之间建立一个Bonjour连接。发现彼此很好,但是我在setTXTRecordData:上遇到了问题。它总是失败(BOOL返回否)..。

_serviceInstances creation:

代码语言:javascript
复制
-(void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing
{
    [aNetService retain];

    [aNetService setDelegate:self];
    [aNetService startMonitoring];

    [aNetService performSelectorOnMainThread:@selector(resolve) withObject:nil waitUntilDone:YES];
[_serviceInstances addObject:aNetService];
}

发送企图:

代码语言:javascript
复制
NSNetService*service = [_serviceInstances objectAtIndex:[servicesTable selectedRow]];

[service setDelegate:self];

NSDictionary*txtRecordDataDictionary = [NSDictionary dictionaryWithObject:@"2" forKey:@"Version"];

if (service)
{
    BOOL success = [service setTXTRecordData:[NSNetService dataFromTXTRecordDictionary:txtRecordDataDictionary]];   

    if (!success)
    {
        NSRunCriticalAlertPanel(@"Sync Error", @"Failed to contact Client. Please restart Carbon on your iPad and try again.", @"OK", nil, nil);
    }

    NSLog(@"Service: %@",service);
}

NSLog消息输出的Service: <NSNetService 0x441b40> local. _test._tcp. David's iPad是正确的。

iOS代码:

代码语言:javascript
复制
NSNetService*service = [[NSNetService alloc] initWithDomain:@"local." type:@"_test._tcp." name:[[UIDevice currentDevice] name] port:28];
[service setDelegate:self];
[service setTXTRecordData:nil];
[service publish];

[service startMonitoring];


- (void)netService:(NSNetService *)sender didUpdateTXTRecordData:(NSData *)data
{
    NSLog(@"Got Data! of %@",sender);

    NSPropertyListFormat format;
    NSDictionary*dict = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListImmutable format:&format errorDescription:nil];


    UIAlertView *myAlert = [[UIAlertView alloc]
                            initWithTitle:[sender name] message:[dict objectForKey:@"Version"]
                            delegate:self 
                            cancelButtonTitle:nil
                            otherButtonTitles:@"OK", nil];
    [myAlert show];  
    [myAlert release];
}

出于某种原因,当我启动iPad应用程序(除了标题之外的空白内容)时,会调用警报,但不会响应来自Mac的任何信号。

我肯定我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-29 14:42:24

只有服务的发布者才能设置TXT记录数据。发布服务的发现者可以读取TXT记录,但不能更改它。TXT记录提供了一种方法,使服务的发布者可以发布额外的、可公开读取的数据,这些数据可以从DNS条目中读取,而不必直接与发布服务器联系。

ETA:至少NSNetService的文档使得您在获取TXT记录数据之前,似乎不需要解析服务。CFNetService文档指出,在获取TXT记录数据之前,您必须解析服务。CFNetServiceNSNetService似乎都只适用于可以使用<dns_sd.h>中描述的can创建和发现的可能的DNS-SD记录的子集,后者允许将多条TXT记录附加到单个广告服务。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6167850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档