首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNetService不包含任何地址

NSNetService不包含任何地址
EN

Stack Overflow用户
提问于 2019-03-24 03:33:09
回答 1查看 202关注 0票数 0

我在一个Mac应用程序中托管一个服务,并与一个iOS应用程序连接。虽然iOS应用程序会找到该服务,但该服务不包含任何地址,因此我无法连接套接字。

这是我在Mac上的托管代码:

代码语言:javascript
复制
- (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上的连接代码:

代码语言:javascript
复制
- (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总是空的,循环会立即退出。

EN

回答 1

Stack Overflow用户

发布于 2019-03-25 05:24:33

对于任何好奇的人,我搜索了一下,找到了一个解决方案。

代码语言:javascript
复制
- (void)netServiceBrowser:(NSNetServiceBrowser *)browser didFindService:(NSNetService *)service moreComing:(BOOL)moreComing

函数,您需要:

  • 将服务添加到数组中,以便在对象超出作用域时立即停止释放对象,并在对象上设置委托,以便您可以响应函数的地址,使其解析

它看起来像这样:

代码语言:javascript
复制
- (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];
}

然后,您想要实现

代码语言:javascript
复制
- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict

代码语言:javascript
复制
- (void)netServiceDidResolveAddress:(NSNetService *)service

来捕捉地址解析或未解析的时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55317592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档