小程序开发API之mDNS

版权声明:欢迎转载,可Chat交流,写博不易请标明出处: https://blog.csdn.net/JackJia2015/article/details/86686629

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





猜你喜欢

转载自blog.csdn.net/JackJia2015/article/details/86686629