gpt4 book ai didi

ios - NSNetService 不包含任何地址

转载 作者:行者123 更新时间:2023-11-29 05:54:15 26 4
gpt4 key购买 nike

我在 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 始终为空,并且循环立即退出。

最佳答案

对于任何好奇的人,我四处搜索并找到了解决方案。

- (void)netServiceBrowser:(NSNetServiceBrowser *)browser didFindService:(NSNetService *)service moreComing:(BOOL)moreComing

函数,你需要:

  • 将服务添加到数组中,以便在对象超出范围时立即停止释放对象
  • 在对象上设置委托(delegate),以便您可以响应其地址解析
  • 调用该函数以使其解析

看起来像这样:

- (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

捕获地址何时解析或未解析。

关于ios - NSNetService 不包含任何地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55317592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com