小程序开发API之mDNS

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参数
小程序开发API之mDNS_第1张图片
object.fail 回调函数Object res
在这里插入图片描述
res.errMsg 的合法值
小程序开发API之mDNS_第2张图片
示例:

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参数
小程序开发API之mDNS_第3张图片
object.fail 回调函数Object res
在这里插入图片描述

res.errMsg 的合法值
在这里插入图片描述

wx.onLocalServiceResolveFail(function callback)

监听 mDNS 服务解析失败的事件
wx.onLocalServiceResolveFail参数
mDNS 服务解析失败的事件的回调函数
小程序开发API之mDNS_第4张图片

wx.onLocalServiceLost(function callback)

监听 mDNS 服务离开的事件
wx.onLocalServiceLost参数
mDNS 服务离开的事件的回调函数
小程序开发API之mDNS_第5张图片

wx.onLocalServiceFound(function callback)

监听 mDNS 服务发现的事件
wx.onLocalServiceFound属性
mDNS 服务发现的事件的回调函数
小程序开发API之mDNS_第6张图片

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 服务停止搜索的事件





你可能感兴趣的:(ONE,PIECE--小程序,ONE,PIECE--小程序)