更新记录
1.0.0(2026-09-17)
- 新增 TCP 客户端与服务端、多连接管理、定向发送、广播和本地地址查询。
- 新增文本、HEX、字节数组收发,以及原始流、分隔符、固定长度和长度前缀四种报文处理方式。
- 新增有限自动重连、连接与接入状态回调、队列限额和明确的发送失败结果。
- 提供 uni-app / uni-app x 示例;HarmonyOS 客户端需 API 12+,完整服务端需 API 20+。
- 首次接入需重新制作并安装 Android 自定义基座,并重新打包 iOS / HarmonyOS。
平台兼容性
uni-app(5.24)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| × | √ | × | × | √ | × | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(5.24)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | √ | √ | √ | × |
lizhao-tcp-pro
介绍
为 uni-app / uni-app x 提供 TCP 客户端与服务端,用同一套 API 连接设备、接收外部连接、管理多条会话,并按业务协议处理粘包、拆包和断线重连。
功能特色
| 特色功能 | 能解决什么问题 | 相关 API / 配置 |
|---|---|---|
| 客户端与服务端 | App 主动连接设备,也能监听端口接收设备连接 | connectTcp、startTcpServer |
| 多连接隔离 | 同时管理不同网关、仪表或接入终端 | connectionId、serverId |
| 文本与二进制 | 收发中文、HEX 指令、含零字节的数据 | text / hex / bytes |
| 四种分包方式 | 根据协议提取完整消息,处理一次读取半条或多条消息 | raw / delimiter / fixedLength / lengthPrefix |
| 自动重连 | 在连接失败或中断后按间隔重试,可限制次数 | reconnect |
| 广播与定向发送 | 给全部接入终端发消息,或只操作某条连接 | broadcastTcpData、sendTcpData |
| 状态与错误回调 | 区分连接、重试、发送失败和主动关闭 | onState、onError、fail |
适合哪些场景
| 场景 | 推荐能力 | 使用结果 |
|---|---|---|
| 连接局域网仪表、打印机、网关 | 客户端 + HEX / bytes | 按设备协议发送指令并接收应答 |
| App 接收设备上报 | 服务端 + 分包 | 每台设备获得独立连接标识 |
| 同时连接多个设备 | 多个 connectionId |
数据和关闭操作互不串线 |
| 按行文本、固定长度或带长度头协议 | frame |
收到完整消息后再交给页面处理 |
| 网络暂时中断后恢复 | 有限自动重连 | 通过状态回调展示连接恢复进度 |
TCP 是字节流。插件处理传输和报文边界,设备指令、登录认证、业务应答及去重规则仍由你的协议决定。
下载与导入
- 使用 HBuilderX 将插件导入项目,保留完整的
uni_modules/lizhao-tcp-pro。 - 页面从插件根目录导入:
import * as Tcp from '@/uni_modules/lizhao-tcp-pro'
uni-app 使用 .vue 页面,uni-app x 使用 .uvue 与 lang="uts"。完整操作示例分别见 uni-app 示例 和 uni-app x 示例。
5 分钟跑通:客户端与服务端互发消息
先在本机监听 127.0.0.1:19090,监听成功后连接,连接成功后发送。服务端只回复一次,客户端只显示结果。若 getTcpCapabilities().server.supported 为 false,请使用后文“连接一个设备”的外部服务端示例。
uni-app
将以下内容放入一个已注册的 .vue 页面,点击按钮。
<template><view><button @tap="run">开始通信</button><text>{{ message }}</text></view></template>
<script>
import * as Tcp from '@/uni_modules/lizhao-tcp-pro'
export default {
data() { return { message: '', leaving: false } },
onUnload() {
this.leaving = true
Tcp.closeTcpConnection({ connectionId: 'demo-client', complete: () => {
Tcp.stopTcpServer({ serverId: 'demo-server' })
} })
},
methods: {
run() {
const fail = e => { this.message = e.errMsg }
if (!Tcp.getTcpCapabilities().server.supported) { this.message = '本系统请连接外部 TCP 服务端'; return }
Tcp.startTcpServer({ serverId: 'demo-server', port: 19090, dataFormat: 'text',
frame: { mode: 'delimiter', delimiterText: '\n' }, fail,
onData: e => Tcp.sendTcpData({ connectionId: e.connectionId, dataFormat: 'text', text: '收到\n', fail }),
success: () => {
if (this.leaving) return
Tcp.connectTcp({ connectionId: 'demo-client', host: '127.0.0.1', port: 19090, dataFormat: 'text',
frame: { mode: 'delimiter', delimiterText: '\n' }, fail,
onData: e => { this.message = e.text ?? '' },
success: () => { if (!this.leaving) Tcp.sendTcpData({ connectionId: 'demo-client', dataFormat: 'text', text: '你好\n', fail }) }
})
}
})
}
}
}
</script>
uni-app x
调用顺序相同,UTS 页面示例如下。
<template><view><button @tap="run">开始通信</button><text>{{ message }}</text></view></template>
<script setup lang="uts">
import * as Tcp from '@/uni_modules/lizhao-tcp-pro'
const message = ref('')
let leaving = false
function fail(e: Tcp.TcpFail) { message.value = e.errMsg ?? '通信失败' }
function run() {
if (!Tcp.getTcpCapabilities().server.supported) { message.value = '本系统请连接外部 TCP 服务端'; return }
Tcp.startTcpServer({ serverId: 'demo-server', port: 19090, dataFormat: 'text',
frame: { mode: 'delimiter', delimiterText: '\n' }, fail,
onData: (e) => { Tcp.sendTcpData({ connectionId: e.connectionId, dataFormat: 'text', text: '收到\n', fail }) },
success: () => {
if (leaving) return
Tcp.connectTcp({ connectionId: 'demo-client', host: '127.0.0.1', port: 19090, dataFormat: 'text',
frame: { mode: 'delimiter', delimiterText: '\n' }, fail,
onData: (e) => { message.value = e.text ?? '' },
success: () => { if (!leaving) Tcp.sendTcpData({ connectionId: 'demo-client', dataFormat: 'text', text: '你好\n', fail }) }
})
}
})
}
onUnload(() => {
leaving = true
Tcp.closeTcpConnection({ connectionId: 'demo-client', complete: () => { Tcp.stopTcpServer({ serverId: 'demo-server' }) } })
})
</script>
核心配置
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| connectionId | string | 客户端是 | 活动期间唯一,关闭后可复用 | 无 | 无 |
| serverId | string | 服务端是 | 活动期间唯一,停止后可复用 | 无 | 无 |
| host | string | 客户端是 | 客户端远端地址;服务端监听地址 | 服务端 127.0.0.1 |
主机名或 IP;监听建议 IP |
| port | number | 是 | 对方端口或固定监听端口,不接受 0 | 无 | 整数 1–65535 |
| dataFormat | string | 收取否、发送是 | 收取时控制 text 字段;发送时选择载荷字段 | 收取 bytes |
text / hex / bytes |
| frame | TcpFrameOptions | 否 | 接收报文边界,双方必须遵守同一协议 | raw |
四模式见后文 |
| reconnect | TcpReconnectOptions | 否 | 只用于外连客户端 | 关闭 | 见重连配置 |
接入方式选择
| 业务需求 | 推荐方式 | 使用结果 |
|---|---|---|
| 已有设备或后台 TCP 服务 | connectTcp |
用指定 ID 管理连接 |
| 让其他设备连接 App | startTcpServer |
从 onConnection 取得接入连接 ID |
| App 内部验证收发 | 前面的回环示例 | 不依赖外部测试程序 |
| 多台设备同时工作 | 每条连接独立 ID | 单条关闭不会关闭其他实例 |
| 自定义操作界面 | 页面自由布局并调用 API | 插件不要求内置 UI 组件 |
从基础到进阶:按业务模块使用
下面的片段均使用前面的 Tcp 根导入。示例的地址、端口、分隔符须替换为实际设备协议。
模块一:连接一个设备
当设备已经监听 TCP 端口时,App 作为客户端。等待成功后再发送。
Tcp.connectTcp({ connectionId: 'meter', host: '192.168.1.50', port: 9000,
dataFormat: 'hex', onData: (e) => { console.log('设备返回', e.hex) },
success: () => { Tcp.sendTcpData({ connectionId: 'meter', dataFormat: 'hex', hex: '01 03 00 00', fail: (e) => { console.log('发送失败', e.errMsg) } }) },
fail: (e) => { console.log('连接失败', e.errCode, e.errMsg) }
})
模块二:App 接收外部连接
需要同一局域网的设备连接 App 时,显式监听 0.0.0.0。设备应连接手机的局域网 IP,不能连接 0.0.0.0。
Tcp.startTcpServer({ serverId: 'gateway', host: '0.0.0.0', port: 19090,
dataFormat: 'text', frame: { mode: 'delimiter', delimiterText: '\n' },
onConnection: (e) => { console.log('设备接入', e.connectionId, e.remoteAddress) },
onData: (e) => { console.log('设备上报', e.connectionId, e.text) },
onClientClose: (e) => { console.log('设备离开', e.connectionId, e.reason) },
fail: (e) => { console.log('监听失败', e.errMsg) }
})
模块三:文本、HEX 和字节收发
向已就绪的连接发送数据,每次只传与 dataFormat 对应的一个载荷字段。HEX 可包含字节间空白;数组元素必须是 0–255 的整数。
Tcp.sendTcpData({ connectionId: 'meter', dataFormat: 'text', text: 'STATUS\n', fail: (e) => { console.log('发送失败', e.errMsg) } })
Tcp.sendTcpData({ connectionId: 'meter', dataFormat: 'hex', hex: 'AA 55 00 FF', fail: (e) => { console.log('发送失败', e.errMsg) } })
Tcp.sendTcpData({ connectionId: 'meter', dataFormat: 'bytes', bytes: [170, 85, 0, 255], fail: (e) => { console.log('发送失败', e.errMsg) } })
接收事件始终提供 bytes 和大写 hex。选择 text 后,合法 UTF-8 还会提供 text;非法 UTF-8 的 text 为 null,原字节仍保留。raw 模式会保留跨读取的 UTF-8 半字符。
模块四:多连接独立管理
为不同设备使用不同 ID,定向关闭只作用于指定实例。
Tcp.connectTcp({ connectionId: 'device-a', host: '192.168.1.51', port: 9000, fail: (e) => { console.log('A 连接失败', e.errMsg) } })
Tcp.connectTcp({ connectionId: 'device-b', host: '192.168.1.52', port: 9000, fail: (e) => { console.log('B 连接失败', e.errMsg) } })
Tcp.closeTcpConnection({ connectionId: 'device-a', reason: '结束本次操作' })
模块五:处理粘包与拆包
根据对方协议选择接收方式。sendTcpData 始终发送原始载荷,不会因连接配置了 frame 就自动补头或补分隔符。
| 模式 | 适用协议 | 消息边界 |
|---|---|---|
| raw | 业务自行处理原始流 | 每次原生读取不保证是完整消息 |
| delimiter | 按行文本、固定结束标记 | 找到完整分隔符后派发 |
| fixedLength | 每条报文固定字节数 | 累计到 fixedLength 后派发 |
| lengthPrefix | 消息前有正文长度 | 1 / 2 / 4 字节无符号长度头,不包含头本身 |
要生成“2 字节大端长度头 + UTF-8 正文”,使用同步构帧结果:
const encoded = Tcp.encodeTcpFrame({ dataFormat: 'text', text: '设备状态',
frame: { mode: 'lengthPrefix', lengthPrefixBytes: 2, byteOrder: 'big' }
})
if (encoded.ok) {
Tcp.sendTcpData({ connectionId: 'meter', dataFormat: 'bytes', bytes: encoded.bytes,
fail: (e) => { console.log('发送失败', e.errMsg) } })
} else { console.log('构帧失败', encoded.error?.errMsg) }
对应接收端也需配置相同长度头。delimiter 模式构帧会在正文后追加分隔符,正文中不允许再含完整分隔符;fixedLength 正文长度必须精确相等;raw 保留正文。
模块六:断线后恢复连接
适用于网络偶发中断。首次 success / fail / complete 只结算一次,之后的重连进度由持续事件报告。
Tcp.connectTcp({ connectionId: 'stable-device', host: '192.168.1.50', port: 9000,
reconnect: { enabled: true, maxAttempts: 5, initialDelayMs: 1000, maxDelayMs: 30000 },
onState: (e) => { console.log('连接状态', e.state, e.reconnectAttempt) },
onError: (e) => { console.log('运行期错误', e.errMsg) },
fail: (e) => { console.log('首次连接失败', e.errMsg) }
})
主动关闭会取消重连。断开时未完成的发送逐项失败,恢复后不会自动重发,以免重复执行设备指令。
模块七:广播与关闭接入连接
服务端已启动后,广播给调用时存在的所有接入连接。关闭单个接入终端时使用该终端的 connectionId。
Tcp.broadcastTcpData({ serverId: 'gateway', dataFormat: 'text', text: 'PING\n',
success: (r) => { console.log('广播完成', r.successCount) },
fail: (e) => { console.log('广播存在失败', e.details) }
})
Tcp.getTcpServerConnections({ serverId: 'gateway', success: (r) => {
if (r.connections.length > 0) Tcp.closeTcpConnection({ connectionId: r.connections[0].connectionId, reason: '结束接入' })
}, fail: (e) => { console.log('查询失败', e.errMsg) } })
模块八:查看连接与本机地址
用于展示就绪状态、连接数和可供其他设备访问的地址。查询结果是当前快照。
Tcp.getTcpConnectionInfo({ connectionId: 'meter', success: (r) => { console.log('连接', r.state, r.sentBytes, r.receivedBytes) }, fail: (e) => { console.log(e.errMsg) } })
Tcp.getTcpServerInfo({ serverId: 'gateway', success: (r) => { console.log('监听', r.address, r.port, r.connectionCount) }, fail: (e) => { console.log(e.errMsg) } })
Tcp.getLocalAddresses({ family: 'ipv4', includeLoopback: false, success: (r) => { console.log('本机地址', r.addresses) }, fail: (e) => { console.log(e.errMsg) } })
模块九:页面退出时释放
让会话归属清晰的页面或业务模块管理。结束时先关闭客户端,再停止该模块创建的服务端;停止服务端会一并关闭其接入连接。
Tcp.closeTcpConnection({ connectionId: 'meter', reason: '页面退出', complete: () => {
Tcp.stopTcpServer({ serverId: 'gateway', reason: '页面退出' })
} })
API 用途速查
| 模块 | 适用业务 | 常用方法 | 使用结果 |
|---|---|---|---|
| 能力判断 | 按平台选择入口 | getTcpCapabilities() |
同步返回角色能力、格式及默认限额 |
| 连接管理 | 连接设备、结束会话 | connectTcp(options)、closeTcpConnection(options) |
首次连接或关闭结果 |
| 数据收发 | 向指定连接发命令 | sendTcpData(options) |
本地写完成的字节数 |
| 连接查询 | 展示状态和计数 | getTcpConnectionInfo(options) |
TcpConnectionInfo |
| 服务端管理 | 监听、停止、查看状态 | startTcpServer(options)、stopTcpServer(options)、getTcpServerInfo(options) |
监听或停止结果、状态快照 |
| 会话管理 | 列表与广播 | getTcpServerConnections(options)、broadcastTcpData(options) |
接入连接列表、逐项广播结果 |
| 地址查询 | 展示当前网卡地址 | getLocalAddresses(options) |
地址、地址族与网卡名称 |
| 协议构帧 | 生成待发送的完整报文 | encodeTcpFrame(options) |
同步返回 { ok, bytes, error } |
除两个同步方法外,API 返回 void,异步结果通过 success / fail / complete 接收。
参数说明与分包、重连配置
连接与监听
基本字段见“核心配置”;以下为增强字段。
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| connectTimeoutMs | number | 否 | 客户端连接期限,包含域名解析 | 10000 ms | 正整数,至 2147483647 |
| idleTimeoutMs | number | 否 | 连续未收到数据的期限;0 关闭 | 0 | 非负整数,至 2147483647 |
| keepAlive | boolean | 否 | 请求系统 TCP 保活;不等于 App 后台保活 | true | true / false |
| tcpNoDelay | boolean | 否 | 请求立即发送小包 | true | true / false |
| maxConnections | number | 否 | 每个监听器最大接入数 | 32 | 1–64 |
| reason | string | 否 | close / stop 的业务说明 | 空字符串 | 无 |
| compat | object | 否 | 可选兼容信息;未知字段忽略 | 无 | 无 |
插件总活动连接最多 64 条(含外连和接入),监听器最多 8 个。ID 长度为 1–128 且不能全是空白;host 长度不超过 253。
发送、广播与同步构帧
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| connectionId | string | 发送是 | 定向发送目标 | 无 | 无 |
| serverId | string | 广播是 | 广播所属服务端 | 无 | 无 |
| dataFormat | string | 是 | 与下面一个载荷字段对应 | 无 | text / hex / bytes |
| text | string | 按格式 | UTF-8 正文 | 无 | 无 |
| hex | string | 按格式 | HEX 正文,不允许奇数位或非 HEX 字符 | 无 | 无 |
| bytes | number[] | 按格式 | 二进制正文 | 无 | 元素为 0–255 整数 |
| frame | TcpFrameOptions | 构帧否 | 仅 encodeTcpFrame 使用 |
raw | 见下表 |
单次发送正文不超过 4 MiB。发送队列最多 256 项且总字节不超过 4 MiB(含正在发送项),超限的新命令失败。文本或字节数组可为空;HEX 至少一个完整字节。
分帧配置 frame
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| mode | string | 否 | 接收及构帧方式 | raw | raw / delimiter / fixedLength / lengthPrefix |
| delimiterText | string | delimiter 三选一 | UTF-8 分隔符 | 无 | 非空 |
| delimiterHex | string | delimiter 三选一 | HEX 分隔符 | 无 | 非空 |
| delimiterBytes | number[] | delimiter 三选一 | 字节分隔符 | 无 | 非空 |
| includeDelimiter | boolean | 否 | 接收结果是否包含分隔符 | false | true / false |
| fixedLength | number | fixedLength 是 | 每帧正文的固定字节数 | 无 | 正整数,不超过 maxFrameBytes |
| lengthPrefixBytes | number | lengthPrefix 是 | 无符号正文长度头字节数 | 无 | 1 / 2 / 4 |
| byteOrder | string | 否 | 长度头字节序 | big | big / little |
| maxFrameBytes | number | 否 | 单帧正文上限,不含协议头或分隔符 | 1048576 | 正整数 |
| maxReceiveBufferBytes | number | 否 | 单连接待解析和待派发数据累计上限 | 2097152 | 至少容纳最大正文加协议边界 |
不要混入其他模式专属字段。长度头允许正文长度为 0;一字节头最大 255,两字节头最大 65535,仍受 maxFrameBytes 限制。
重连配置 reconnect
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| enabled | boolean | 否 | 启用自动重连 | false | true / false |
| maxAttempts | number | 否 | 最大重试次数,不含首次;0 不重试 | 5 | 非负整数 |
| initialDelayMs | number | 否 | 第一次重连等待时间 | 1000 | 非负整数 |
| maxDelayMs | number | 否 | 指数等待的上限 | 30000 | 不小于 initialDelayMs |
| jitterRatio | number | 否 | 等待抖动比例 | 0.2 | 0–1 |
| stableResetMs | number | 否 | 连续就绪达到此时长后重置重试次数 | 30000 | 正整数 |
参数错误、协议错误、缓冲溢出与主动关闭不会重连。可重试网络错误仍受次数限制。
本地地址查询
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
| family | string | 否 | 地址族过滤 | 全部 | ipv4 / ipv6 |
| includeLoopback | boolean | 否 | 是否保留回环地址 | true | true / false |
回调说明
| 回调 | 触发时机 | 使用说明 |
|---|---|---|
| success | 单次命令成功 | connect 只报告首次成功;不随重连重复 |
| fail | 参数错误或单次命令失败 | 与 success 互斥 |
| complete | success 或 fail 之后 | 单次命令恰好一次,参数为同一类结果或错误 |
| onState | 连接或服务端状态变化 | 分别返回 TcpStateEvent / TcpServerStateEvent |
| onData | 收到一条完整帧;raw 为流读取结果 | connectionId / serverId / dataFormat / bytes / hex / text / sequence |
| onError | 首次完成后的运行错误;服务端监听或子连接错误 | TcpFail,按连接 ID 判断归属 |
| onConnection | 服务端接入新连接 | 包含双方业务 ID、远端地址和端口 |
| onClientClose | 接入连接结束 | 包含连接 ID、reason、manuallyClosed |
连接状态为 idle → connecting → ready;重试进入 reconnect-wait,最终关闭为 closing → closed。服务端状态为 idle → starting → listening → stopping → stopped。每次新尝试的 generation 用于区分迟到结果。页面离开时显式关闭会话,停止后持续回调随资源释放。
支持平台
| 平台 | 是否支持 | 说明 |
|---|---|---|
| Android | 客户端、服务端 | Android 5.0+,uni-app / uni-app x |
| iOS | 客户端、服务端 | iOS 12+,uni-app / uni-app x;局域网访问需允许本地网络授权 |
| HarmonyOS | 按系统版本提供 | 客户端 API 12+;完整服务端 API 20+,低版本明确拒绝监听 |
| Web / 小程序 | 不提供原生 TCP | 网络 API 返回明确错误;纯数据构帧可独立使用 |
推荐 HBuilderX 5.24 或更高版本。App 首次接入或更新原生部分后,需重新制作包含插件的 Android 自定义基座,并重新打包 iOS / HarmonyOS;Android 与 HarmonyOS 项目需合并插件声明的网络权限。
返回值说明
| 结果 / 字段 | 类型 | 说明 |
|---|---|---|
| TcpCapabilities | object | platform、client/server 的 supported 与最低系统要求、默认限额 |
| ConnectTcpResult | object | connectionId、state、remoteAddress/remotePort、localAddress/localPort、generation |
| SendTcpDataResult | object | connectionId、bytesWritten、localWriteCompleted、deliveryNote |
| CloseTcpConnectionResult | object | connectionId、closed、alreadyClosed;未知但合法 ID 视为已关闭 |
| TcpConnectionInfo | object | 连接 ID/角色/状态/代次/端点、queuedSendItems/queuedSendBytes、receivedBytes/sentBytes、reconnectCount |
| StartTcpServerResult | object | serverId、address、port、state、generation |
| TcpServerInfo | object | 监听信息以及 connectionCount、maxConnections |
| TcpServerConnectionsResult | object | serverId、connections(连接快照数组) |
| BroadcastTcpDataResult | object | serverId、targetCount、successCount、failureCount、results |
| 广播 results[] | object | connectionId、success、bytesWritten、errCode、errMsg、deliveryUnknown、details |
| StopTcpServerResult | object | serverId、stopped、closedConnectionCount、alreadyStopped |
| GetLocalAddressesResult | object | platform、addresses、notes;地址含 address/family/interfaceName/loopback |
| TcpEncodedFrame | object | ok=true 才可发送 bytes;失败时 error 非空、bytes=[] |
| TcpFail | object | errSubject、errCode、errMsg、operation、connectionId、serverId、retryable、details |
广播目标数为 0 时成功返回空结果。任何目标失败时走 fail,汇总仍位于 error.details;bytesWritten=-1 或 deliveryUnknown=true 表示无法确认远端交付,不能直接认定“没发出去”。
错误码说明
| 错误码 | 含义 | 说明 |
|---|---|---|
| 9099001 | 参数不合法 | 检查必填字段、类型和范围 |
| 9099002 | 平台不支持 | 查询角色能力;低版本 Harmony 服务端也使用此码 |
| 9099003 | 原生实现不可用 | 检查当前构建是否包含对应平台实现 |
| 9099004 / 9099005 | ID 重复 | 分别为 connectionId / serverId 已占用 |
| 9099006 / 9099007 | ID 不存在 | 查询或发送指向不存在的连接 / 服务端 |
| 9099008 | 端口不合法 | 使用 1–65535 的整数 |
| 9099009 | 数据格式冲突 | dataFormat 与一个载荷字段对应 |
| 9099010 | HEX 不合法 | 检查字符和偶数位数 |
| 9099011 | 字节数组不合法 | 每项须为 0–255 整数 |
| 9099012 | 发送正文超限 | 降低单次载荷大小 |
| 9099013 | 分帧配置不合法 | 检查模式字段、固定长度或正文分隔符冲突 |
| 9099014 | 帧或接收缓冲超限 | 检查协议长度及接收处理速度 |
| 9099015 | 发送队列超限 | 等待发送结果后再提交新任务 |
| 9099016 | 连接失败 | 检查服务端地址、网络和连接容量 |
| 9099017 | 监听失败 | 检查绑定地址、端口占用和监听器容量 |
| 9099018 | 操作超时 | 检查连接或空闲期限 |
| 9099019 | 读写失败 | 结合 details 判断网络中断、关闭或未知交付 |
| 9099020 | 连接结束时仍有半帧 | 检查双方报文边界;raw 文本也检查未完成 UTF-8 字符 |
注意事项与常见错误
sendTcpData.success仅表示本地写操作完成。需要确认设备执行结果时,必须等待业务应答并自行设置请求标识与去重规则。- 对方一次发送可能被拆成多次读取,多次发送也可能合并。双方应明确分隔符、固定长度或长度头;不能靠读取块大小识别报文。
- 连接参数和载荷在调用时保存副本,调用后修改原对象不会更新当前会话;修改协议配置请关闭后重建。
127.0.0.1只能本机访问;局域网监听应使用0.0.0.0或指定本机网卡地址。网卡列表不保证远端可达,仍受路由、热点隔离、防火墙和系统权限影响。- 插件提供普通 TCP,不提供 TLS、UDP、WebSocket、应用层心跳或设备协议解析。涉及敏感数据时应使用适合业务的加密与认证协议。
- 自动重连和系统 TCP keep-alive 不保证 App 在后台持续运行,应用被系统挂起或结束后应由业务重新建立连接。
- 关闭同一个不存在的合法 ID 会幂等成功;查询不存在的 ID 则失败。关闭过程中已接受的命令会先结算,后报告关闭完成。
- 默认有限额保护。提高帧大小时同步调整接收缓冲;不要在
onData中长时间阻塞,也不要让收发双方无限自动互相回复。 - 插件只处理调用方指定连接上的数据,不自行上传、持久化或记录业务正文。
联系方式
信-微:l-z-1-8-7-1512-5421(-去掉,不这样写会被和谐)
作者系列 UTS 插件
以下为已在 DCloud 插件市场上架的作者系列 UTS 插件,可按业务场景组合使用。未列出的插件表示当前未确认公开市场页,后续上架后再补充。
| 插件 | 能力方向 | 插件市场 |
|---|---|---|
lizhao-nfc-pro |
NFC 标签读写、NDEF、IsoDep 与诊断 | 查看插件 |
lizhao-float-window |
悬浮窗、画中画、权限与诊断 | 查看插件 |
lizhao-device-id |
设备标识、隐私策略与诊断 | 查看插件 |
lizhao-scan-pro |
原生扫码、连续扫码、相册识别 | 查看插件 |
lizhao-choose-file |
原生文件选择、上传、进度与取消 | 查看插件 |
lizhao-bg-audio |
背景音频播放、队列、倍速与事件 | 查看插件 |
lizhao-smart-tts |
系统 TTS、云端合成、听书方案 | 查看插件 |
lizhao-share-plus |
系统分享、远程文件下载后分享 | 查看插件 |
lizhao-sqlite-pro |
原生 SQLite、迁移、备份与诊断 | 查看插件 |
lizhao-icon-pro |
SVG 图标组件、多主题与缓存 | 查看插件 |
lizhao-cast-screen |
DLNA 投屏、AirPlay 路由入口 | 查看插件 |
lizhao-call-kit |
电话、短信、通讯录原生能力 | 查看插件 |
lizhao-app-keepalive |
应用保活、唤醒、自愈与报告 | 查看插件 |
lizhao-doc-corrector |
文档扫描、矫正、增强与识别 | 查看插件 |
lizhao-emu-detect |
模拟器环境检测、风险评分与证据 | 查看插件 |
lizhao-gallery-pro |
相册媒体分页、筛选、缩略图与导出 | 查看插件 |
lizhao-video-thumb |
视频封面、批量取帧与 Base64 返回 | 查看插件 |
lizhao-ble |
BLE 扫描、连接、读写、通知与自动重连 | 查看插件 |
lizhao-sse-pro |
SSE、Line、JSONL 与 Raw 流式请求 | 查看插件 |
lizhao-pdf-pro |
PDF 阅读、签批、真实写回与页面处理 | 查看插件 |
lizhao-serial-port |
路径串口、USB 串口、多会话收发与诊断 | 查看插件 |
lizhao-wechat-kit |
微信登录、分享、支付、小程序与客服 | 查看插件 |
lizhao-video-editor |
视频裁剪、压缩、取帧与 FFmpeg/FFprobe | 查看插件 |
lizhao-vpn-pro |
企业 VPN、IKEv2、安全接入与脱敏诊断 | 查看插件 |

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 6486
赞赏 5
下载 12610445
赞赏 1949
赞赏
京公网安备:11010802035340号