更新记录

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 - 超时时间(毫秒),默认5000
  • success: 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记录

注意事项

  1. 网络要求: 设备必须连接到局域网才能扫描到mDNS设备
  2. 权限要求: 确保应用具有网络访问权限
  3. 防火墙: 某些网络环境可能会阻止mDNS通信
  4. 扫描时间: 建议超时时间设置为3-8秒,平衡发现效果和响应速度

故障排除

未发现设备

  • 检查设备是否连接到同一局域网
  • 确认目标设备开启了mDNS服务
  • 检查防火墙设置是否阻止了UDP端口5353

权限错误

  • 确保应用获得了网络访问权限
  • 检查Android设置中的应用权限

版本信息

  • 版本: 1.0.0
  • 作者: wzq
  • 更新日期: 2025-12-18
  • 兼容性: Android 6.0+

隐私、权限声明

1. 本插件需要申请的系统权限列表:

网络相关权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。