Pri*_*yat 0 iphone macos bonjour objective-c ios
我正在尝试在iOS设备和Mac之间建立Bonjour连接.发现彼此工作很好,但我遇到了问题setTXTRecordData:.它总是失败(BOOL返回NO)......
_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];
}
Run Code Online (Sandbox Code Playgroud)
发送尝试:
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);
}
Run Code Online (Sandbox Code Playgroud)
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];
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当我启动iPad应用程序(除标题之外的空白内容)时会调用警报,但不会响应来自我的Mac的任何信号.
我确定我错过了什么?
只有服务的发布者才能设置TXT记录数据.已发布服务的发现者可以读取TXT记录但不能更改它.TXT记录为服务的发布者提供了一种方法,用于发布可从DNS条目读取的其他公共可读数据,而无需直接联系发布者.
ETA:至少,NSNetService在您获取TXT记录数据之前,您的文档似乎无需解析服务.该CFNetService文档指出您必须先解析该服务才能获得TXT记录数据.二者CFNetService并NSNetService似乎只与可创建和使用中所描述的C API发现了可能的DNS-SD记录的子集的工作<dns_sd.h>,从而提供了多TXT记录附加到一个单一的通告服务.
| 归档时间: |
|
| 查看次数: |
3254 次 |
| 最近记录: |