首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNetServiceBrowser未找到已发布的服务

NSNetServiceBrowser未找到已发布的服务
EN

Stack Overflow用户
提问于 2012-11-23 18:04:47
回答 4查看 2.8K关注 0票数 6

在iPhone (服务器)上,我试图发布一个服务,但我的代码遇到了NSNetService对象的委托方法:

代码语言:javascript
复制
-(void)netServiceDidPublish:(NSNetService *)sender

所以我相信我的服务@"_chatty._tcp."已经成功发布了。然后在另一个委托(客户端)上,我使用NSNetServiceBrowser来查找我的服务,但它没有运行到iPhone方法中:

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

我在这个网站上发现了一些与我的案例相关的问题,大部分答案都提醒您检查委托对象是否超出范围。我确信我的委托工作得很好,因为它遇到了另一个委托方法,比如:

代码语言:javascript
复制
-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser

有人能帮我找出原因吗?

以下是我的代码的一些部分:

我像这样初始化服务:

代码语言:javascript
复制
#define MY_PROTOCOL @"_chatty._tcp."

self.myService = [[NSNetService alloc]
                   initWithDomain:@"" type:MY_PROTOCOL
                   name:@"thaith" port:self.port];

使用Browser类中给定的listeningSocket初始化端口:

代码语言:javascript
复制
NSNetServiceBrowser* finder = [[NSNetServiceBrowser alloc] init];

//I also retain the finder.
finder.delegate = self;

[finder searchForServicesOfType:MY_PROTOCOL inDomain:@""];
EN

回答 4

Stack Overflow用户

发布于 2013-04-15 01:56:51

在遇到同样的问题后,放弃了一个月。我刚刚回到它并解决了它:

尽管the sample code in the docs似乎暗示了不同的意思,但并没有为NSNetServiceBrowser使用局部变量。一旦它超出作用域,它就会被垃圾回收。使finder成为一个实例变量或属性,这样它就可以继续存在。我没有马上发现这一点,因为netServiceBrowserWillSearch:委托正在被调用,所以我认为一切都很好……

票数 10
EN

Stack Overflow用户

发布于 2012-11-23 18:40:13

可能的解决方案

  1. 检查两个WiFi标识符是否相同
  2. 检查两者都在相同的WiFi网络中
  3. 检查分配为相同类的NSNetServiceBrowser委派

最后下载示例,安装在两台设备上,测试并确认其工作正常。

票数 1
EN

Stack Overflow用户

发布于 2013-10-30 21:32:48

我建议使用终端命令,而不是下载bonjour浏览器:

代码语言:javascript
复制
dns-sd -B _chatty._tcp local.

对我来说,这表明服务器端工作得很好。目前,当我的应用程序启动时,我可以找到服务,我唯一的问题是,一旦我停止服务器,我得到了“删除”事件,但再次运行它,我无法再发现它。多亏了dns-sd -B,我知道问题出在我的客户端

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

https://stackoverflow.com/questions/13526800

复制
相关文章

相似问题

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