mDNS

局域网通信

DNS和mDNS
DNS(Domain Name System,域名系统)因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。

mDNS 即多播DNS(Multicast DNS),mDNS主要实现了在没有传统DNS服务器的情况下使局域网内的主机实现相互发现和通信,使用的端口为5353,遵从dns协议,使用现有的DNS信息结构、名语法和资源记录类型。并且没有指定新的操作代码或响应代码。
在局域网中,设备和设备之前相互通信需要知道对方的ip地址的,大多数情况,设备的ip不是静态ip地址,而是通过dhcp 协议动态分配的ip 地址,如何设备发现呢,就是要mdns大显身手,例如:现在物联网设备和app之间的通信,要么app通过广播,要么通过组播,发一些特定信息,感兴趣设备应答,实现局域网设备的发现,当然mdns 比这强大的多

mDNS 工作原理
mDNS 使用组播地址为: 224.0.0.251 (ipv6: FF02::FB) 端口为5353,mDNS 是用于局域网内部的,并且主机的域名为.local 结尾,每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁(域名),和我的IP地址是多少。然后其他有mdns服务的主机就会响应,也会告诉你,它是谁(域名),它的IP地址是多少。 当然设备需要服务时,就是使用mDNS 查询域名对对应的ip地址,对应的设备收到该报文后同样通过组播方式应答,此时其他主机设备也是可以收到该应答报文,其他主机也会记录域名和ip 以及ttl 等,更新缓存

比如,A主机进入局域网,开启了 mDNS 服务,并向 mDNS 服务注册以下信息:我提供 FTP 服务,我的IP是 192.168.1.101,端口是 21。当B主机进入局域网,并向 B 主机的 mDNS 服务请求,我要找局域网内 FTP 服务器,B主机的 mDNS 就会去局域网内向其他的 mDNS 询问,并且最终告诉你,有一个IP地址为 192.168.1.101,端口号是 21 的主机,也就是 A 主机提供 FTP 服务,所以 B 主机就知道了 A 主机的 IP 地址和端口号了。

大概的原理就是这样子,mDNS提供的服务要远远多于这个,当然服务多但并不复杂。

wx.startLocalServiceDiscovery(Object object)

开始搜索局域网下的 mDNS 服务。搜索的结果会通过 wx.onLocalService* 事件返回。
wx.startLocalServiceDiscovery参数

object.fail 回调函数Object res

res.errMsg 的合法值

示例:

wx.startLocalServiceDiscovery({// 当前手机所连的局域网下有一个 _http._tcp. 类型的服务serviceType: '_http._tcp.',success: console.log,fail: console.log
})

注意

  • wx.startLocalServiceDiscovery 是一个消耗性能的行为,开始 30 秒后会自动 stop 并执行 wx.onLocalServiceDiscoveryStop 注册的回调函数。
  • 在调用 wx.startLocalServiceDiscovery 后,在这次搜索行为停止后才能发起下次 wx.startLocalServiceDiscovery。停止本次搜索行为的操作包括调用 wx.stopLocalServiceDiscovery 和 30 秒后系统自动 stop 本次搜索。

wx.stopLocalServiceDiscovery(Object object)

停止搜索 mDNS 服务

wx.stopLocalServiceDiscovery参数

object.fail 回调函数Object res

res.errMsg 的合法值

wx.onLocalServiceResolveFail(function callback)

监听 mDNS 服务解析失败的事件
wx.onLocalServiceResolveFail参数
mDNS 服务解析失败的事件的回调函数

wx.onLocalServiceLost(function callback)

监听 mDNS 服务离开的事件
wx.onLocalServiceLost参数
mDNS 服务离开的事件的回调函数

wx.onLocalServiceFound(function callback)

监听 mDNS 服务发现的事件
wx.onLocalServiceFound属性
mDNS 服务发现的事件的回调函数

wx.onLocalServiceDiscoveryStop(function callback)

监听 mDNS 服务停止搜索的事件

wx.offLocalServiceResolveFail(function callback)

取消监听 mDNS 服务解析失败的事件

wx.offLocalServiceLost(function callback)

取消监听 mDNS 服务离开的事件

wx.offLocalServiceFound(function callback)

取消监听 mDNS 服务发现的事件

wx.offLocalServiceDiscoveryStop(function callback)

取消监听 mDNS 服务停止搜索的事件

小程序开发API之mDNS相关推荐

  1. 微信小程序开发 | API应用案例(下)

    API应用案例(下) 6.1[案例5]模拟时钟 6.1.1 案例分析 6.1.2 前导知识 6.1.3 钟表页面布局 6.1.4 钟表页面绘制 6.2[案例6]罗盘动画 6.2.1 案例分析 6.2. ...

  2. 小程序开发API之改变置顶栏文字内容 wx.setTopBarText(已停,只有旧版微信有效)

    效果展示: wx.setTopBarText(Object object) 动态设置置顶栏文字内容.只有当前小程序被置顶时能生效,如果当前小程序没有被置顶,也能调用成功,但是不会立即生效,只有在用户将 ...

  3. 小程序开发API之数据上报、数据分析

    数据上报 wx.reportMonitor(string name, number value) 自定义业务数据监控上报接口. 参数 string name 监控ID,在「小程序管理后台」新建数据指标 ...

  4. 小程序开发API之实时音视频

    wx.createLivePlayerContext(string id, Object this) 创建 live-player 上下文 LivePlayerContext 对象. 参数string ...

  5. 微信小程序开发 | API应用案例(上)

    API应用案例(上) 5.1[案例1]用户登录 5.1.1 案例分析 5.1.2 前导知识 5.1.3 搭建开发者服务器 5.1.4 实现用户登录 5.1.5 检查用户是否已经登录 5.1.6 获取用 ...

  6. 微信小程序开发API

    微信小程序的内置API 本文内介绍的只是其中一部分,更多请参考官方文档 地址 界面API 交互 wx.showToast(Object object) 显示消息提示框 属性: title属性==> ...

  7. 小程序开发API之获取系统信息wx.getSystemInfo()、wx.getSystemInfoSync()

    wx.getSystemInfo() 获取系统信息 函数参数: 返回值: 例如: 写法一 index.js /*brand 设备品牌 model 设备型号pixelRatio 设备像素比screenW ...

  8. 小程序开发API之监听加速计wx.startAccelerometer

    加速传感器: 手机加速度传感器也叫运动传感器,它能捕捉手机的几种典型运动模式如摇晃.甩动.翻转等.达到用运动控制手机的目的. 举例来说,玩"沼泽竞技"和"空中快车&quo ...

  9. 小程序开发API之地图wx.createMapContext及MapContext 实例

    效果展示 wx.createMapContext(string mapId, Object this) 创建 map 上下文 MapContext 对象. 参数 string mapId 组件的 id ...

最新文章

  1. Oracle重建所有表和索引
  2. sklearn 相关性分析_人工智能和大数据的骨架支点—— 机器学习之相关性分析
  3. linux安装ppp服务器,服务器_最简单的Linux系统上的pptpd服务器安装,1. rpm -qa|grep ppp 检查ppp版本, - phpStudy...
  4. WCF 入门 WCF基础知识问与答
  5. 算法提高 身份证号码升级
  6. ELK结合Beats工具的搭建使用(Metricbeat、Filebeat、Topbeat)
  7. 近期刷题总结[2019 03 09]
  8. [渝粤教育] 苏州科技大学 混凝土结构设计原理 参考 资料
  9. iconfont阿里矢量图标库使用说明
  10. Panda Directx Exporter for max 插件
  11. 用svn上的文件,覆盖本地文件
  12. JPA的cannot simultaneously fetch multiple bags异常的解决
  13. 深入理解dex文件结构
  14. webview加载gif图片
  15. Django cms 教程六:集成博客/新闻模块
  16. Xcode升级以后构建ios出现 “unable to find utility PackageApplication, not a developer tool or in PATH”的报错解决
  17. theano 这磨人的小妖精
  18. Android SQLite在应用中数据保存查询,但是拷贝的xxx.db没有数据或没有更新,.db_wal和.db_shm文件
  19. 跟益达学Solr5之使用MMSeg4J分词器
  20. ubuntu18qt报错:The process was ended forcefully.

热门文章

  1. Transformer翻译模型Decoder详解(Masking)
  2. 关于安全的一点理解感悟
  3. 利用 android手机DLNA功能,实现手机视频无线播放到电脑、电视
  4. Vagrant 入门 - 同步目录(synced folders)
  5. LR(1)分析法的总控的实现(C++实现)
  6. uniapp平台使用vant组件按需引入,并兼容到微信、百度、抖音小程序
  7. 分享个好用的在线翻译器拍照扫一扫方法
  8. matlab矢量场数值可视化(动态数值模拟)
  9. 【数据结构进阶】二叉平衡树
  10. 使用C语言来访问ARM寄存器的语法