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

_serviceInstances创建:

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


发送尝试:

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代码:

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的任何信号。

我确定我缺少什么?

最佳答案

只有服务的发布者可以设置TXT记录数据。发布服务的发现者可以读取TXT记录,但不能更改它。 TXT记录为服务的发布者提供了一种发布其他公共可读数据的方式,这些数据可以从DNS条目中读取,而不必直接与发布者联系。

预计到达时间(ETA):至少,NSNetService的文档使它看起来像不需要解析服务即可获取TXT记录数据。 CFNetService文档指出,必须先解析服务,然后才能获取TXT记录数据。 CFNetServiceNSNetService似乎只能与可以使用<dns_sd.h>中所述的C API创建和发现的可能DNS-SD记录的子集一起使用,该API允许将多个TXT记录附加到单个广告服务。

关于iphone - NSNetService问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6167850/

10-09 16:14
查看更多