在iPhone (服务器)上,我试图发布一个服务,但我的代码遇到了NSNetService对象的委托方法:
-(void)netServiceDidPublish:(NSNetService *)sender所以我相信我的服务@"_chatty._tcp."已经成功发布了。然后在另一个委托(客户端)上,我使用NSNetServiceBrowser来查找我的服务,但它没有运行到iPhone方法中:
-(void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing我在这个网站上发现了一些与我的案例相关的问题,大部分答案都提醒您检查委托对象是否超出范围。我确信我的委托工作得很好,因为它遇到了另一个委托方法,比如:
-(void)netServiceBrowserWillSearch:(NSNetServiceBrowser *)aNetServiceBrowser有人能帮我找出原因吗?
以下是我的代码的一些部分:
我像这样初始化服务:
#define MY_PROTOCOL @"_chatty._tcp."
self.myService = [[NSNetService alloc]
initWithDomain:@"" type:MY_PROTOCOL
name:@"thaith" port:self.port];使用Browser类中给定的listeningSocket初始化端口:
NSNetServiceBrowser* finder = [[NSNetServiceBrowser alloc] init];
//I also retain the finder.
finder.delegate = self;
[finder searchForServicesOfType:MY_PROTOCOL inDomain:@""];发布于 2013-04-15 01:56:51
在遇到同样的问题后,放弃了一个月。我刚刚回到它并解决了它:
尽管the sample code in the docs似乎暗示了不同的意思,但并没有为NSNetServiceBrowser使用局部变量。一旦它超出作用域,它就会被垃圾回收。使finder成为一个实例变量或属性,这样它就可以继续存在。我没有马上发现这一点,因为netServiceBrowserWillSearch:委托正在被调用,所以我认为一切都很好……
发布于 2012-11-23 18:40:13
可能的解决方案
最后下载示例,安装在两台设备上,测试并确认其工作正常。
发布于 2013-10-30 21:32:48
我建议使用终端命令,而不是下载bonjour浏览器:
dns-sd -B _chatty._tcp local.对我来说,这表明服务器端工作得很好。目前,当我的应用程序启动时,我可以找到服务,我唯一的问题是,一旦我停止服务器,我得到了“删除”事件,但再次运行它,我无法再发现它。多亏了dns-sd -B,我知道问题出在我的客户端
https://stackoverflow.com/questions/13526800
复制相似问题