Tag: nsnetservice

NSNetServiceBrowser找不到服务

我试图编写基于CocoaEcho示例的客户端(iPad)/服务器(iMac)应用程序。 我的第一个简单的例子工作,但添加更多的function后,客户端无法find服务器。 启动服务器后,我启动客户端,都在本地networking。 客户端开始search服务,并为其浏览器获取“netServiceBrowserWillSearch:”消息,但之后没有任何反应。 再次触发对服务的search,导致出现错误-72003,10(浏览器仍在忙于search)的“didNotsearch:”消息。 1)我检查了服务器与WiTap应用程序可达。 有客户端和服务器连接正确。 2)我检查是否服务器发布“dns-sd -B _cocoaecho”的服务,它被检测到。 3)客户端应用程序中的nsnetservicebrowser对象被声明为一个属性,所以不应该有一个范围问题。 我也检查了debugging器,它仍然存在…. 我的代码: 客户: @interface MySocketClient : UIResponder <NSNetServiceBrowserDelegate, NSStreamDelegate> { … NSNetService * myServer; NSString* nextMsg; } @property (nonatomic, strong, readwrite) NSMutableArray * services; // of NSNetService @property (nonatomic, strong, readwrite) NSNetServiceBrowser * serviceBrowser; @property (nonatomic, strong, readwrite) NSInputStream * inputStream; @property (nonatomic, strong, […]

NSNetService在WiFi而不是蓝牙

我有2个iOS设备和一个启动或连接到NSNetService的应用程序。 当两台设备都开启蓝牙时,数据stream将自动通过蓝牙接口完成。 我不希望这样,我希望两个设备通过WiFi进行通信。 有没有办法强制NSNetService通过WiFi进行通信? 谢谢

iOS上的NSNetServiceBrowser / Bonjour问题

我正在使用Bonjour(NSNetServiceBrowser,准确地说)通过WiFi在我正在开发的一个iOS项目开发的应用程序。 但是,尽pipe注意到NSNetServiceBrowser为什么在iPhone OS中find未发布的服务的优秀响应中提出的问题? 我仍然遇到与NSNetSericeBrowser的一些困难。 我的设置如下: 使用运行iOS 4.5.3的iPad。 使用AirPort Express作为接入点/路由器。 在连接到networking的Mac上运行dns-sd -B _serviceName可以正常工作 – 也就是说,所有发布和停止的调用都立即反映在桌面上。 但是,我遇到以下问题: 长时间发布的服务(大约15分钟+)往往不会被客户端删除, 即使它们从Mac上消失! (即didRemoveService不会被调用)。 有时,发布的服务在networking上不会被其他人看到, 即使它们出现在Mac上也是如此! (即didFindService未调用) – 这可能与下面3/4点有关…因此,如果应用程序在iPad连接到networking之前开始运行(并search),则它不search新networking正常。 如果设备在发布服务后更改networking,会发生什么情况? 我发现Bonjour不会在新的networking上重新发布服务 – 如何才能迫使这种情况发生呢? 如果设备在search服务时更换networking会发生什么情况? 我发现这也会导致问题,并且往往会导致找不到会话(didFindService未被调用)。 我遇到的问题很奇怪,因为Bonjour 90%的时间工作…只是10%,这是破坏我的应用程序的可靠性! 烦人的是,所有上述问题都可以通过双击主页button并强制closures应用程序,然后重新运行来解决。 再次运行后,它总是find正确的会话或正确发布。 避免这个问题的一个方法是拆卸并重新启动NSNetServiceBrowser,只要无线networking改变了…但是这看起来很混乱,没有必要。 令人沮丧的是,Bonjour是一个高级API,没有任何实际的选项来进行调整和testing。 任何想法我怎么能解决问题1-4? 谢谢!

连接后立即断开与服务器的连接

我已经使用GCDAsyncsocket库编写了一个Singleton类,用于使用Bonjourbuild立与具有相同服务的任何其他设备的连接。 在一台设备上,我使用其方法“ startPublishing ”使其成为主机(服务器),从另一台设备(客户机)上的应用程序调用“ StartBrowsing ”来查找可用的networking设备。 当用户select该networking中的任何服务时,我正在调用方法“ initConnectionWithService ”,通过parsingNetService的地址来启动连接stream程来连接。 BonjourUtilClass.h @interface BonjourUtilClass : NSObject<GCDAsyncSocketDelegate,NSNetServiceDelegate,NSNetServiceBrowserDelegate>{ NSNetService *netServiceToPublish; GCDAsyncSocket *socketPub; NSNetServiceBrowser *netServiceToBrowse; GCDAsyncSocket *socketSub; NSMutableArray *mutArrServices; GCDAsyncSocket *socketConnected; } +(id)sharedInstance; -(void)startPublishing; -(void)startBrowsing; -(void)initConnectionWithService:(NSNetService*)netServiceToConnect; -(void)disconnectWithCurrent; @end BonjourUtilClass.m static BonjourUtilClass *sharedObject = nil; @implementation BonjourUtilClass +(id)sharedInstance{ if(!sharedObject){ sharedObject = [[BonjourUtilClass alloc]init]; } return sharedObject; } #pragma mark – Browsing […]

NSNetService工作正常,但不能得到hostName,解决导致错误

我使用Bonjour与NSNetService从我的iPhone发布服务器。 这一切都按预期工作,我可以浏览我正在服务的网页等。但是,在iPhone上,我想显示主机名称(即URL,如“myDevice.local。”),以便还可以input手动在浏览器中的地址(有用的客户端缺lessbonjour发现服务)。 我的理解是调用方法[myNetService hostName]应该给我这个地址。 但是,这个调用总是返回nil。 我读了一些论坛,我首先应该解决的服务,但是[myNetService解决]和[myNetService resolveWithTimeout:10]调用委托方法 – (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict; 与错误 { NSNetServicesErrorCode = -72003; NSNetServicesErrorDomain = 10; } 这显然意味着它已经解决了。 所有这一切都发生在我可以使用该服务的时候。 我也可以得到端口,域和服务的types。 唯一奇怪的是,调用[myNetService addresses]返回一个空数组。 我正在使用SDK 3.1.3。 有没有人知道我可能做错了什么?