iOS6中Bonjour简介
2013-09-05 12:29:42 来源:WEB开发网3. 如何使用Bonjour
对于最终用户来讲,Bonjour基本上是透明的,他们不需要了解如何去使用Bonjour,往往都是应用开发者去考虑如何使用Bonjour。
对于应用开发者来讲,他们需要考虑有两部分,一是如何作为Bonjour客户端去发现使用本地服务,二是如何作为服务端如何注册Bonjour服务
3.1 如何作为Bonjour客户端去发现本地服务
iOS开发可以使用NSNetService框架中的NSNetServiceBrowser类去发现本地服务。
基本过程如下:
首先创建NSNetServiceBrowser实例:
serviceBrowser = [[NSNetServiceBrowser alloc] init];
然后指定NSNetServiceBrowser实例的代理,所指定的代理需要实现“NSNetServiceBrowserDelegate”协议。由实现以上协议的代理对服务查找相关的事件进行响应。这里指定本实例为NSNetServiceBrowser代理,由本例对服务查找的事件进行响应:
serviceBrowser.delegate = self;
接着使用NSNetServiceBrowser实例的searchForServicesOfType方法查找服务,方法中可以指定需要查找的服务类型和查找的域。以下样例查找“local.”域中的“http”服务:
[serviceBrowser searchForServicesOfType:@"_http._tcp." inDomain:@"local."];
最后,在“NSNetServiceBrowserDelegate”的以下方法中响应“didFindService”事件,就是找到服务的事件。其中的netService参数就是找到的服务,在netService参数中可以得到服务地址,服务主机名等信息。
- (void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing
{}
3.2 如何作为服务端注册Bonjour服务
要注册成为Bonjour服务,开发者可以直接创建NSNetService实例,并通过initwithDomain: type: name: port:方法进行初始化,指定服务的域,类型,名称和端口,样例代码如下:
service = [[NSNetService alloc] initWithDomain:@"local." type:@"_http._tcp." name:@"DamonWebServer" port:port];
NSNetService创建成功后,可以通过setDelegate指定代理,同时通过publish方法发布注册服务:
[service setDelegate:self];
[service publish];
其中指定的代理需要遵从“NSNetServiceDelegate”协议,可以对服务发布成功,发布失败等事件。
正常来讲,如果需要发布一个服务,需要在发布服务之前准备好服务并启动它。不过NSNetService的publish方法并不依赖它所发布的服务,不管服务是否准备好,是否启动,NSNetService的publish都可以成功将服务发布出去,只不过服务发布出去后其它使用这个服务的客户端会发现这个发布出来的服务是个无效服务。
更多精彩
赞助商链接