【发布时间】:2019-03-23 19:33:09
【问题描述】:
我在 Mac 应用程序中托管服务并与 iOS 应用程序连接。虽然 iOS 应用会找到该服务,但该服务不包含任何地址,因此我无法连接套接字。
这是我在 Mac 上的托管代码:
- (void)start {
queue = dispatch_queue_create("KeyboardServer", DISPATCH_QUEUE_CONCURRENT);
socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:queue];
NSError *error = nil;
if ([socket acceptOnPort:0 error:&error]) {
service = [[NSNetService alloc] initWithDomain:@"local." type:@"_probonjore._tcp." name:@"TestServer" port:[socket localPort]];
service.delegate = self;
[service publish];
} else {
NSLog(@"Unable to create server");
}
}
这是iOS上的连接代码:
- (BOOL)connectToServer:(NSNetService *)service {
NSArray *addresses = service.addresses;
socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:queue];
for (NSData *address in addresses) {
NSError *error;
if ([socket connectToAddress:address error:&error]) {
NSLog(@"Socket connected!");
return true;
}
}
return false;
}
问题是,service.addresses 始终为空,循环立即退出。
【问题讨论】:
-
有什么办法让它自动选择一个端口,还是我只需要随机选择一个并希望它不会被占用?
-
我刚刚检查了一下,如果你传递了 0,套接字库 (GCDAsyncSocket) 会自动选择一个端口。上次我运行它时,该服务正在端口 51417 上发布。
标签: ios objective-c macos bonjour nsnetservice