Ios开发总结

Bonjour!实现零配置网络联网的解决方案

2016-07-16  本文已影响566人  02ec002ab1b2

S简单介绍一下项目对本地网络连接的需求:车机连接移动设备。

那我们如何进行连接呢。

  1. 首先我们想到的最简单的方法就是通过IP连接。

  2. UDP广播。

利用UDP广播我们能向同一本地网络所有设备发送一条消息,接收到信息后我们能够解析出发送方的端口和IP。

问题:

  1. 耗电问题。不断的UDP Broadcast 会耗费大量电源。
  2. 网络阻塞问题。因为UDP广播会对同一本地网络的所有Host都发送信息。过于密集的发送,有可能会造成网络的堵塞。
  3. 稳定性,UDP Socket可能会因为各种情况而中断。

什么是Bonjour?

****bonjour****是苹果公司发布的一个基于****ZEROCONF****工作组****(IETF****下属小组****)****的工作****,****用于实现零配置网络联网的解决方案。****Bonjour****是基于****IP****层协议的。********

Bonjour是Apple推出的零配置网络协议,主要的目的是在缺少中心服务器的情况下解决网络设备的IP获取,名称解析和服务发现等关键问题。

Bonjour可以做什么


Bonjour可以完成的工作主要是在缺少中心服务器的情况下解决IP获取,名称解析和服务发现这三个问题。

如何使用Bonjour


对于最终用户来讲,Bonjour基本上是透明的,他们不需要了解如何去使用Bonjour,往往都是应用开发者去考虑如何使用Bonjour。
对于应用开发者来讲,他们需要考虑有两部分,一是如何作为Bonjour客户端去发现使用本地服务,二是如何作为服务端如何注册Bonjour服务

    serviceBrowser = [[NSNetServiceBrowser alloc] init];
    serviceBrowser.delegate = self;
    [serviceBrowser searchForServicesOfType:@"_http._tcp." inDomain:@"local."];
 - (void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser didFindService:(NSNetService *)netService moreComing:(BOOL)moreServicesComing {
}
    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都可以成功将服务发布出去,只不过服务发布出去后其它使用这个服务的客户端会发现这个发布出来的服务是个无效服务。

上一篇 下一篇

猜你喜欢

热点阅读