更新记录
1.0.0(2026-07-01)
下载此版本
初始版本
平台兼容性
uni-app(4.25)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
√ |
- |
- |
√ |
√ |
5.0 |
12 |
12 |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| - |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
uni-app x(4.25)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| - |
- |
5.0 |
12 |
12 |
- |
其他
xyz-socket
uni-app x 跨平台 TCP/UDP Socket 插件,支持 Android、iOS、HarmonyOS。
安装
将 xyz-socket 目录复制到项目的 uni_modules 目录下即可。
基本用法
import { createTcpSocket, createUdpSocket } from "@/uni_modules/xyz-socket"
TCP
import {
createTcpSocket,
CreateTcpSocketOptions,
TcpConnectOptions,
TcpSendOptions,
TcpCloseOptions,
} from "@/uni_modules/xyz-socket"
// 1. 创建 TCP Socket
const tcpTask = createTcpSocket({
host: "192.168.1.100",
port: 8089,
timeout: 10000,
success: (res) => { console.log(res.errMsg) },
fail: (err) => { console.error(err.errCode, err.errMsg) },
} as CreateTcpSocketOptions)
// 2. 注册事件回调
tcpTask.onConnect((result) => {
console.log("Connected:", result.localAddress, result.localPort)
})
tcpTask.onMessage((result) => {
const bytes = new Uint8Array(result.data)
const msg = String.fromCharCode(...bytes)
console.log("Received:", msg)
})
tcpTask.onClose((result) => {
console.log("Closed, isLocal:", result.isLocal)
})
tcpTask.onError((result) => {
console.error("Error:", result.errMsg)
})
// 3. 发起连接
tcpTask.connect({
success: (res) => { console.log("connect ok") },
fail: (err) => { console.error("connect fail:", err.errCode) },
} as TcpConnectOptions)
// 4. 发送数据(字符串或 ArrayBuffer)
tcpTask.send({
data: "Hello Server",
success: (res) => { console.log("send ok") },
fail: (err) => { console.error("send fail:", err.errCode) },
} as TcpSendOptions)
// 5. 关闭连接
tcpTask.close({
success: (res) => { console.log("close ok") },
} as TcpCloseOptions)
UDP
import {
createUdpSocket,
CreateUdpSocketOptions,
UdpBindOptions,
UdpSendOptions,
UdpCloseOptions,
} from "@/uni_modules/xyz-socket"
// 1. 创建 UDP Socket
const udpTask = createUdpSocket({
success: (res) => { console.log(res.errMsg) },
fail: (err) => { console.error(err.errCode) },
} as CreateUdpSocketOptions)
// 2. 注册事件回调
udpTask.onMessage((result) => {
const bytes = new Uint8Array(result.data)
const msg = String.fromCharCode(...bytes)
console.log("From:", result.remoteInfo.address, result.remoteInfo.port, "Data:", msg)
})
udpTask.onClose((result) => {
console.log("Closed:", result.errMsg)
})
udpTask.onError((result) => {
console.error("Error:", result.errMsg)
})
// 3. 绑定本地端口(0 为自动分配)
udpTask.bind({
port: 0,
success: (res) => { console.log("bind ok") },
fail: (err) => { console.error("bind fail:", err.errCode) },
} as UdpBindOptions)
// 4. 发送数据报
udpTask.send({
data: "Hello UDP",
host: "192.168.1.100",
port: 8090,
success: (res) => { console.log("send ok") },
fail: (err) => { console.error("send fail:", err.errCode) },
} as UdpSendOptions)
// 5. 关闭
udpTask.close({
success: (res) => { console.log("close ok") },
} as UdpCloseOptions)
API
createTcpSocket(options)
创建 TCP Socket 实例。
参数 CreateTcpSocketOptions:
| 属性 |
类型 |
必填 |
说明 |
| host |
string |
是 |
远程主机 IP 或主机名 |
| port |
number |
是 |
远程端口号 (1-65535) |
| timeout |
number |
否 |
连接超时时间(毫秒),默认 30000 |
| success |
function |
否 |
创建成功回调 |
| fail |
function |
否 |
创建失败回调 |
| complete |
function |
否 |
完成回调 |
返回值: TcpSocketTask
TcpSocketTask
| 方法 |
说明 |
| connect(options?) |
发起 TCP 连接 |
| send(options) |
发送数据(string 或 ArrayBuffer) |
| close(options?) |
关闭连接 |
| onConnect(callback) |
注册连接建立回调 |
| onMessage(callback) |
注册数据接收回调 |
| onClose(callback) |
注册连接关闭回调 |
| onError(callback) |
注册错误回调 |
createUdpSocket(options)
创建 UDP Socket 实例。
参数 CreateUdpSocketOptions:
| 属性 |
类型 |
必填 |
说明 |
| success |
function |
否 |
创建成功回调 |
| fail |
function |
否 |
创建失败回调 |
| complete |
function |
否 |
完成回调 |
返回值: UdpSocketTask
UdpSocketTask
| 方法 |
说明 |
| bind(options) |
绑定本地端口,开始接收数据报 |
| send(options) |
发送数据报到指定主机和端口 |
| close(options?) |
关闭 UDP Socket |
| onMessage(callback) |
注册数据报接收回调 |
| onClose(callback) |
注册关闭回调 |
| onError(callback) |
注册错误回调 |
UdpBindOptions:
| 属性 |
类型 |
必填 |
说明 |
| port |
number |
是 |
本地端口(0 为自动分配,1-65535 为指定) |
UdpSendOptions:
| 属性 |
类型 |
必填 |
说明 |
| data |
any |
是 |
发送数据(string 或 ArrayBuffer) |
| host |
string |
是 |
目标主机 IP 或主机名 |
| port |
number |
是 |
目标端口号 (1-65535) |
事件回调
TCP 事件
| 事件 |
回调参数 |
说明 |
| onConnect |
{ localAddress: string, localPort: number } |
连接建立 |
| onMessage |
{ data: ArrayBuffer } |
收到数据 |
| onClose |
{ isLocal: boolean } |
连接关闭(isLocal 表示是否本地发起) |
| onError |
{ errMsg: string } |
错误 |
UDP 事件
| 事件 |
回调参数 |
说明 |
| onMessage |
{ data: ArrayBuffer, remoteInfo: { address: string, port: number } } |
收到数据报 |
| onClose |
{ errMsg: string } |
Socket 关闭 |
| onError |
{ errMsg: string } |
错误 |
错误码
TCP 错误码
| 错误码 |
说明 |
| 9001001 |
无效的 host 参数 |
| 9001002 |
无效的 port 参数 |
| 9001100 |
连接被拒绝 |
| 9001101 |
连接超时 |
| 9001102 |
已经处于连接状态 |
| 9001103 |
网络不可达 |
| 9001200 |
未连接状态 |
| 9001202 |
发送系统错误 |
| 9001900 |
实例已关闭 |
UDP 错误码
| 错误码 |
说明 |
| 9002001 |
无效的端口号 |
| 9002100 |
端口已被占用 |
| 9002101 |
绑定系统错误 |
| 9002200 |
未绑定状态 |
| 9002201 |
无效的目标地址 |
| 9002202 |
发送系统错误 |
| 9002900 |
实例已关闭 |
注意事项
- 模拟器中连接本机服务时,Android/Harmony 使用
10.0.2.2,iOS 使用 127.0.0.1
- TCP 的
onMessage 回调中 data 为 ArrayBuffer 类型,需要通过 Uint8Array 转换后使用
- UDP 必须先
bind 后才能 send 和接收数据
- 页面销毁时应调用
close() 释放资源
send 的 data 参数支持 string(自动 UTF-8 编码)或 ArrayBuffer
底层实现
| 平台 |
TCP 实现 |
UDP 实现 |
| Android |
Java NIO SocketChannel + Selector |
Java NIO DatagramChannel + Selector |
| iOS |
CocoaAsyncSocket (GCDAsyncSocket) |
CocoaAsyncSocket (GCDAsyncUdpSocket) |
| HarmonyOS |
@ohos.net.socket |
@ohos.net.socket |