os中,bonjour是一个零配置的网络服务分发服务器与客户端。

 
在使用bonour之前你应该明白的是,bonjour并不负责数据传输,只负责发布服务与检索服务,并在客户端获取服务端的信息。
 
浏览的过程
1.创建NSNetServiceBrowser实例,设置delegate
2.搜索存在的域名(domain name) (有两个方法,参考开发文档看区别)
3.在搜索域名结束之后,一定要结束搜索(使用stop方法)之后在开始搜索每个domain上(或者特定domian)的服务。当然,如果提前知道domain,可以直接掠过第一步,直接搜索特定类型的服务
4.搜索到特定类型的服务之后,得到回调。可以设置这个服务(NSnetService)的delegate,调用地址解析函数resolveWithTimaeout:进行地址解析,在回调函数中获取地址(从NSnetService 的 addresses参数中),如果没有进行解析,地址参数是空的。
 
PS:一个browser监控所有的domain类型的同时不能监控服务,或者可以监控一个domain下某个类型的服务,但不能在监控其他。
 
涉及到的类:NSNetService NSNetServiceBrowser 框架:Foundation 
 
使用方法:
服务端:
publish一个服务:
1.创建一个socket,并监控某个端口(因为Foundation没有提供有关socket的类,所以需要使用Core Foundation的函数)
2.使用带有端口的初始化函数初始化NSNetService,设置delegate,并将它添加到一个runloop里面。最后调用NSNetService的publish函数发布应用。 
 
你如果想要在publish一个NSNetService的时候使用它的地址,进行resolve的时候一定要在publish之前,你可以在resolve之后publish,但是不能反过来。

bonjour的使用的更多相关文章

  1. 【读书笔记】iOS网络-使用Bonjour实现自组织网络

    Bonjour就是这样一种技术:设备可以通过它轻松探测并连接到相同网络中的其他设备,整个过程只需要很少的用户参与或是根本就不需要用户参与.该框架提供了众多适合于移动的使用场景,如基于网络的游戏,设备间 ...

  2. Visual Studio提示Bonjour backend初始化失败

    Visual Studio提示Bonjour backend初始化失败 错误信息:The Bonjour backend failed to initialize, automatic Mac Bui ...

  3. iOS--NSNetService和NSNetServiceBrowser(Bonjour网络编程)

    Cocoa 网络框架: Cocoa 网络框架有三层,最底层的是基于 BSD socket库,然后是 Cocoa 中基于 C 的 CFNetwork,最上面一层是 Cocoa 中 Bonjour.通常我 ...

  4. bonjour

    首先bonjour并非必须的,可是它的确非常方便,假设没有它我们须要指定ip地址进行局域网的传输,有了它就能够依据服务的详细的名称来选择服务,能够这样来理解bonjour就相当于hostname,我们 ...

  5. 【读书笔记】iOS-网络-使用Bonjour实现自组织网络

    Bonjour就是这样一种技术:设备可以通过它轻松探测并连接到相同网络中的其他设备,整个过程只需要很少的用户参与或是根本就不需要用户参与.该框架提供了众多适合于移动的使用场景,如基于网络的游戏,设备间 ...

  6. bonjour browser 下载

    在Mac 上叫 Bonjour Browser http://www.macupdate.com/app/mac/13388/bonjour-browser/download IOS 上的 app 叫 ...

  7. iOS- Apple零配置网络协议Bonjour的使用?

    1.前言 这段时间为了解决公司App的网络离线需求,做了个Apple推出的零配置网络协议Bonjour的Test,主要是为了解决iOS设备的IP获取,之前是可以使用socket的广播来实现,但是使用A ...

  8. Visual Studio Xamarin提示Bonjour backend初始化失败

    Visual Studio Xamarin提示Bonjour backend初始化失败 错误信息:The Bonjour backend failed to initialize, automatic ...

  9. iOS中解析Bonjour服务(转)

    服务器端Bonjour服务发布成功之后,客户端可以通过NSNetService解析服务,解析成功后,可以获得通讯的数据细节,如:IP地址.端口等信息. 首先需要实例化NSNetService对象代码如 ...

随机推荐

  1. [美团 CodeM 初赛 Round A]数列互质

    题目大意: 给出一个长度为n的数列a1,a2,a3,...,an,以及m组询问(li,ri,ki),求区间[li,ri]中有多少数在该区间中的出现次数与ki互质. 思路: 莫队. f[i]记录数字i出 ...

  2. Linux下的echo输出换行符

    echo -e "text1\ntext2" -e表示开启转移字符

  3. JQuery给动态HTML绑定事件

    说明:涉及到事件委托原理,这里不深究了. 直接使用live或者delegate去实现.网上说on也可以,没测试过. 注意:live在新版的JQuery已经取消.on在比较新的版本才支持. 参考: ht ...

  4. menuStrip鼠标经过自动显示菜单

    //--------------------------------------------------------------------------------- private void For ...

  5. AtomicInteger类的简单应用

    AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicIn ...

  6. Mac下Git的安装和卸载

    1.安装最新版本:https://git-scm.com/download/mac,下载pkg进行安装 2.卸载:运行/usr/local/git/uninstall.sh

  7. final修饰符的三种使用场景

    final有三种使用场景,各自是修饰变量.方法和类.不管哪种修饰.一旦声明为final类型.你将不能改变这个引用了,编译器会检查代码,假设你试图再次初始化,编译器会报错.以下我来详细说说每一种修饰场景 ...

  8. nfs mount 故障 mount.nfs: access denied by server while mounting 10.0.100.208:/backup_usb

    生产环境: 服务端centos7.2,客户端:ubuntu16.04 挂载出现的故障: root@HDCtrl100:/mnt# mount -t nfs 10.0.100.208:/backup_u ...

  9. GLEW扩展库【转】

    http://blog.sina.com.cn/s/blog_4aff14d50100ydsy.html 一.关于GLEW扩展库: GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口.使用O ...

  10. EL表达式中null和empty的区别

    下面通过一个例子看看看null和empty的区别,建立一个test.jsp文件,内容如下: <%@page pageEncoding="utf-8" %> name:$ ...