我在一个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总是空的,循环会立即退出。
发布于 2019-03-25 05:24:33
对于任何好奇的人,我搜索了一下,找到了一个解决方案。
在
- (void)netServiceBrowser:(NSNetServiceBrowser *)browser didFindService:(NSNetService *)service moreComing:(BOOL)moreComing函数,您需要:
它看起来像这样:
- (void)netServiceBrowser:(NSNetServiceBrowser *)browser didFindService:(NSNetService *)service moreComing:(BOOL)moreComing {
NSLog(@"Found Service %@", [service name]);
[services addObject:service];
[service setDelegate:self];
[service resolveWithTimeout:5.0f];
}然后,您想要实现
- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict和
- (void)netServiceDidResolveAddress:(NSNetService *)service来捕捉地址解析或未解析的时间。
https://stackoverflow.com/questions/55317592
复制相似问题