更新记录
1.0.0(2026-06-17)
插件1.0.0版本
平台兼容性
uni-app(4.66)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | × | × | × | √ | √ | 5.1 | 12 | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.66)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 5.1 | 12 | × | - |
wen-udp
UDP 网络服务插件,支持 UDP 服务端、UDP 客户端功能。常用于物联网、智能家居、iot、局域网设备发现、设备交互控制、消息通知等场景,支持苹果、安卓。
平台兼容性
uni-app (4.66)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | 5.1+ | 12+ |
uni-app x (4.66)
| Chrome | Safari | Android | iOS |
|---|---|---|---|
| ❌ | ❌ | 5.1+ | 12+ |
导入 uni_modules 规范插件需使用 HBuilderX 4.66+。
关于插件
本插件为 uni-app / uni-app x 提供原生 UDP 通信能力。UDP 通常用于局域网内设备发现、消息广播通知等场景。
- 支持在 APP 端建立 UDP 服务端,接收外部设备(通常是局域网设备)发送过来的消息。支持同时建立多个 UDP 服务端。支持单播、组播、广播。
- 支持在 APP 端建立 UDP 客户端,连接到外部的 UDP 服务端进行通信。支持同时建立多个 UDP 客户端。支持单播、组播、广播。
- 额外提供
getLocalIp()获取本机 IPv4 地址。
如何使用
基础概念
- UDP 单播(Unicast):一对一通信,数据从单个发送方传输到单个接收方。数据包通过目标 IP 地址和端口直接送达指定主机。
- UDP 组播(Multicast):一对多通信,发送方将数据发送到一个组播组地址(范围:
224.0.0.0~239.255.255.255),加入该组的所有主机都能接收数据。 - UDP 广播(Broadcast):一对所有通信,数据发送到本地网络的所有主机(目标 IP 为广播地址,如
255.255.255.255或子网广播地址192.168.1.255)。
引入
import { createUdpServer, createUdpClient, getLocalIp } from '@/uni_modules/wen-udp';
UDP 服务端基本使用
使用 createUdpServer 建立 UDP 服务端。
// 初始化【单播】UDP 服务端
let unicastUdpServer = createUdpServer({
port: 20101
})
// 注册接收回调
unicastUdpServer.on('message', (msg) => {
console.log('【单播-服务端】接收到消息:', msg.remoteAddress, msg.data)
})
unicastUdpServer.on('error', (err) => {
console.error('错误消息:', err)
})
unicastUdpServer.start()
// 初始化【广播】UDP 服务端
let broadcastUdpServer = createUdpServer({
port: 20101,
isBroadcast: true
})
broadcastUdpServer.on('message', (msg) => {
console.log('【广播-服务端】接收到消息:', msg.remoteAddress, msg.data)
})
broadcastUdpServer.on('error', (err) => {
console.error('错误消息:', err)
})
broadcastUdpServer.start()
// 初始化【组播】UDP 服务端
let multicastUdpServer = createUdpServer({
port: 20101,
isBroadcast: true,
isMulticast: true,
multicastAddress: '239.192.1.10' // 组播地址,必填
})
multicastUdpServer.on('message', (msg) => {
console.log('【组播-服务端】接收到消息:', msg.remoteAddress, msg.data)
})
multicastUdpServer.on('error', (err) => {
console.error('错误消息:', err)
})
multicastUdpServer.start()
发送(单播、广播、组播)消息,支持 text 文本 与 hex 十六进制字符串 两种格式:
/////////// 不同 UDP 链接发送消息示例 ///////////
// 单播服务端发送文本
unicastUdpServer.send('hello, world', '192.168.50.130', 30101)
// 广播服务端发送 hex
broadcastUdpServer.sendHex(
'68656C6C6F2C2062726F616463617374', // hello, broadcast
'192.168.50.255', // 子网广播;"255.255.255.255" 为全网广播,iOS 限制较严
30102
)
// 组播服务端发送文本
multicastUdpServer.send('hello, multicast', '239.192.1.10', 30103)
/////////// 支持多种数据格式示例 ///////////
// 发送文本
unicastUdpServer.send('hello, world', '192.168.50.130', 30101)
// 发送 hex 字符串
unicastUdpServer.sendHex('68656c6c6f2c313233', '192.168.50.130', 30101) // hello,123
关闭链接:
unicastUdpServer.stop()
UDP 客户端基本使用
使用 createUdpClient 建立 UDP 客户端。
// 初始化【单播】UDP 客户端
let unicastUdpClient = createUdpClient({
localPort: 0, // 0 表示随机端口;同端口收发场景可指定具体端口
isBroadcast: false
})
unicastUdpClient.on('message', (msg) => {
console.log('【单播-客户端】接收到消息:', msg.remoteAddress, msg.data)
})
unicastUdpClient.on('error', (err) => {
console.error('错误消息:', err)
})
unicastUdpClient.start()
console.log('本地端口:', unicastUdpClient.getLocalPort())
// 初始化【广播】UDP 客户端
let broadcastUdpClient = createUdpClient({
localPort: 0,
isBroadcast: true // 发送广播时必须 true
})
broadcastUdpClient.on('message', (msg) => {
console.log('【广播-客户端】接收到消息:', msg.remoteAddress, msg.data)
})
broadcastUdpClient.on('error', (err) => {
console.error('错误消息:', err)
})
broadcastUdpClient.start()
// 初始化【组播】UDP 客户端
let multicastUdpClient = createUdpClient({
localPort: 0,
isBroadcast: true
})
multicastUdpClient.on('message', (msg) => {
console.log('【组播-客户端】接收到消息:', msg.remoteAddress, msg.data)
})
multicastUdpClient.on('error', (err) => {
console.error('错误消息:', err)
})
multicastUdpClient.start()
发送消息(客户端 send / sendHex 需指定目标 IP 与端口):
// 发送文本
unicastUdpClient.send('hello, world', '192.168.50.130', 30101)
// 发送 hex
unicastUdpClient.sendHex('68656c6c6f2c313233', '192.168.50.130', 30101)
// 发送广播
broadcastUdpClient.send('LITECAYDODISCOVERY', '255.255.255.255', 10008)
// 发送组播
multicastUdpClient.send('hello, multicast', '239.192.1.10', 30101)
关闭客户端链接:
unicastUdpClient.stop()
接收消息
收到的消息对象包含以下字段:
| 字段 | 说明 |
|---|---|
data |
UTF-8 文本 |
dataHex |
十六进制字符串 |
remoteAddress |
对端 IP |
remotePort |
对端端口 |
获取本机 IP
const ip = getLocalIp() // 优先 WiFi / 以太网 IPv4,失败返回 ""
if (ip.length > 0) {
console.log('本机 IP:', ip)
}
典型场景示例
局域网设备发现(广播 + 固定服务端端口回推):
// 1. 服务端监听固定端口,等设备单播回推
const server = createUdpServer({ port: 49736, isBroadcast: true })
server.start()
// 2. 客户端广播发现报文(先 start 再 send)
const client = createUdpClient({ localPort: 0, isBroadcast: true })
client.start()
client.send('LITECAYDODISCOVERY:49736', '255.255.255.255', 10008)
// 3. 在 server 上通过 on() 或 pollMessage() 接收设备回推
组播接收(SSDP 等):
const ms = createUdpServer({
port: 1900,
isBroadcast: true,
isMulticast: true,
multicastAddress: '239.255.255.250'
})
ms.start()
权限要求
安卓 Android 权限
插件已在 AndroidManifest.xml 中声明,一般无需手动添加:
<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_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" />
苹果 iOS 权限(需要苹果开发者平台申请权限)
插件已在 Info.plist 与 UTS.entitlements 中配置。若主工程需补充,可参考:
<key>NSLocalNetworkUsageDescription</key>
<string>需要扫描本地网络设备以提供服务</string>
<key>NSMulticastServiceUsageDescription</key>
<string>需要加入多播组以实现群组通信</string>
<key>NSAllowsLocalNetworking</key>
<true/>
<key>UIBackgroundModes</key>
<array>
<string>network</string>
</array>
附:API 速查
模块方法
| 方法 | 说明 |
|---|---|
createUdpServer(options) |
创建 UDP 服务端 |
createUdpClient(options) |
创建 UDP 客户端 |
getLocalIp() |
获取本机 IPv4 |
服务端配置 createUdpServer(options)
| 属性 | 必填 | 默认 | 说明 |
|---|---|---|---|
port |
✅ | - | 监听端口 |
isBroadcast |
❌ | false |
开启广播能力 |
isMulticast |
❌ | false |
启用组播接收 |
multicastAddress |
❌ | "" |
组播地址,isMulticast: true 时必填 |
客户端配置 createUdpClient(options)
| 属性 | 必填 | 默认 | 说明 |
|---|---|---|---|
localPort |
❌ | 0 |
本地端口,0 为随机分配 |
isBroadcast |
❌ | false |
发送广播时必须 true |
实例方法(Server / Client 通用)
| 方法 | 说明 |
|---|---|
start() |
启动 Socket,开始接收 |
stop() |
关闭 Socket,释放端口 |
getLocalPort() |
实际绑定端口,失败返回 -1 |
send(data, ip, port) |
发送 UTF-8 文本 |
sendHex(hex, ip, port) |
发送十六进制字符串(不含空格、0x) |
on('message', cb) |
收到数据回调(Android) |
on('error', cb) |
错误回调(Android) |
on('close', cb) |
关闭回调(Android) |
pollMessage() |
轮询取出一条消息,无则 null |
pollError() |
轮询取出一条错误,无则 null |
pollClosed() |
轮询是否已关闭 |
注意事项
start()之后再调用getLocalPort(),-1表示绑定失败。- 广播 / 组播须设置
isBroadcast: true;广播目标可用"255.255.255.255"或子网广播"192.168.1.255"。 - Android 广播失败时会自动对当前
/24子网做单播扫射兜底;Socket 自动绑定 WiFi 网卡,避免走蜂窝网络。 - 同一端口不可重复绑定;页面卸载时记得
stop()并清除 poll 定时器。
隐私、权限声明
1. 本插件需要申请的系统权限列表:
请查看上方「权限要求」章节。
2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:
插件不采集任何数据。
3. 本插件是否包含广告:
无。
完整可运行示例见项目 pages/index/index.uvue(UDP 调试助手)。

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