更新记录
1.0.1(2025-12-19)
修复获取端口失败问题
1.0.0(2025-12-18)
发现设备
平台兼容性
uni-app(4.83)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| - | - | - | - | √ | - | √ | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.83)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | √ | - | - | - |
mDNS局域网设备发现插件
基于Android系统API实现的mDNS设备发现插件,无需第三方依赖,支持扫描局域网中的mDNS广播设备。 插件示例包含node.js后端代码
功能特性
- 🔍 mDNS服务发现: 支持扫描各种类型的mDNS服务
- 🚀 并发扫描: 使用线程池并发处理,提高扫描效率
- 📱 多种设备类型: 支持HTTP服务、打印机、投屏设备等多种设备类型
- 📊 详细设备信息: 获取设备名称、IP地址、端口、TXT记录等完整信息
- 🛡️ 完善的错误处理: 提供详细的错误信息和状态反馈
- 🎨 美观的UI界面: 提供两个测试页面,功能完善且界面友好
支持的服务类型
- HTTP/HTTPS服务:
_http._tcp.local.,_https._tcp.local. - 文件服务:
_ftp._tcp.local.,_smb._tcp.local. - 远程访问:
_ssh._tcp.local. - 打印设备:
_printer._tcp.local.,_ipp._tcp.local. - 投屏设备:
_airplay._tcp.local.,_googlecast._tcp.local. - 音乐服务:
_spotify-connect._tcp.local.,_raop._tcp.local.
使用方法
1. 基础用法
import {
scanServices,
getMDNSDeviceList,
getLocalIP,
isMDNSAvailable
} from '@/uni_modules/wzq-mNDS'
// 检查mDNS功能
const available = isMDNSAvailable()
// 获取本机IP
const localIP = getLocalIP()
// 扫描常见服务类型
scanServices({
serviceTypes: ['_http._tcp.local.', '_printer._tcp.local.'],
timeout: 5000,
success: (result) => {
console.log('发现设备:', result.devices)
},
fail: (error) => {
console.error('扫描失败:', error.errMsg)
}
})
2. 扫描所有常见设备
getMDNSDeviceList({
timeout: 8000,
success: (result) => {
console.log('发现的设备数量:', result.totalDevices)
result.devices.forEach(device => {
console.log(`${device.name} - ${device.ip}:${device.port}`)
})
}
})
API文档
scanServices(options)
扫描指定的mDNS服务类型。
参数:
serviceTypes: Array- 要扫描的服务类型列表 timeout: number - 超时时间(毫秒),默认5000success: function - 成功回调fail: function - 失败回调
返回:
{
errCode: 0,
errMsg: "scanServices:ok",
devices: [
{
name: "设备名称",
ip: "192.168.1.100",
port: 80,
serviceType: "_http._tcp",
hostname: "device.local",
txtRecords: ["key1=value1", "key2=value2"]
}
],
count: 1
}
getMDNSDeviceList(options)
获取所有发现的mDNS设备(扫描常见服务类型)。
getLocalIP()
获取当前设备的WiFi IP地址。
isMDNSAvailable()
检查设备是否支持mDNS功能。
测试页面
项目包含两个测试页面:
1. 主页面 (pages/index/index.vue)
功能完善的设备发现界面,包含:
- 系统状态检查
- 多种扫描模式(常见服务、自定义服务、单个服务)
- 设备列表展示和筛选
- 详细的设备信息
- 操作日志记录
2. 测试页面 (pages/test/test.vue)
简洁快速的功能测试界面,包含:
- 快速扫描按钮
- 进度显示
- 设备详情查看
- 实时日志输出
权限要求
插件需要以下Android权限(已在manifest.json中配置):
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
技术实现
- 纯Android系统API: 基于Java网络API实现,无第三方依赖
- UDP多播: 使用MulticastSocket发送和接收mDNS数据包
- 并发处理: 使用ExecutorService实现多线程并发扫描
- 协议解析: 完整实现mDNS协议解析,支持PTR、A、SRV、TXT记录
注意事项
- 网络要求: 设备必须连接到局域网才能扫描到mDNS设备
- 权限要求: 确保应用具有网络访问权限
- 防火墙: 某些网络环境可能会阻止mDNS通信
- 扫描时间: 建议超时时间设置为3-8秒,平衡发现效果和响应速度
故障排除
未发现设备
- 检查设备是否连接到同一局域网
- 确认目标设备开启了mDNS服务
- 检查防火墙设置是否阻止了UDP端口5353
权限错误
- 确保应用获得了网络访问权限
- 检查Android设置中的应用权限
版本信息
- 版本: 1.0.0
- 作者: wzq
- 更新日期: 2025-12-18
- 兼容性: Android 6.0+

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 3262
赞赏 0
下载 12369904
赞赏 1828
赞赏
京公网安备:11010802035340号