NSNetService表示已发布,但在网络上不可见

问题描述 投票:0回答:1

我正在为自己使用(至少是最初使用)一个小的iOS应用程序,我想我会使用Bonjour在两个iOS设备之间配置网络。我的服务器的界面定义

NSNetService *netService;

并且该实现使用以下代码来宣传其存在:

const NSString *kSEBonjourServiceDomain = @"";      //use defaults
const NSString *kSEBonjourServiceName = @"_test._tcp.";

//...

netService = [[NSNetService alloc] initWithDomain:(NSString *)kSEBonjourServiceDomain type:(NSString *)kSEBonjourServiceName name:@"" port:sin.sin_port];
if (netService)
    {
    netService.delegate = self;
    netService.includesPeerToPeer = YES;
    [netService publish];
    }
else NSLog(@"Failed to create NSNetService");

当启动服务器时,我的NSNetService对象确实调用-netServiceDidPublish:委托方法,但是当我使用Discovery浏览我网络上的bonjour服务时,我的服务没有出现。除了const字符串外,此代码与我的一个Mac应用程序中的某些代码相同(可以正常工作),并且与Apple的示例代码非常相似。万一需要在此处添加某些内容,我已经浏览了Xcode功能选项卡中的所有选项,但看不到任何相关内容。我还阅读了许多文档和教程,它们没有提到要做更多的事情,但是如果您将晦涩的构建设置设置为一个字符串,并且仅在iOS上运行,这也就不足为奇了。您必须通过阅读去年9月的watchOS人机接口指南来了解有关内容。那么,有人能启发我吗?我想念什么?预先感谢!

cocoa bonjour
1个回答
0
投票

事实证明,由于我代码中其他地方的愚蠢错误,在我注册NSNetService时,sin.sin_port设置为0。尽管NSNetService认为这不是问题,但它导致该服务被服务浏览器忽略。因此答案是,端口为0的服务将正确注册,但将无法工作。感谢gaige的协助。

© www.soinside.com 2019 - 2024. All rights reserved.