uniapp tcp客户端 onopen事件如何使用

在uniapp中创建TCP客户端时,onOpen事件应该如何正确使用?我按照文档创建了TCP连接,但发现onOpen事件没有被触发。请问需要特别设置什么参数吗?或者是我的用法有问题?能否提供一个完整的示例代码?

2 回复

在uniapp中,使用TCP客户端的onopen事件很简单。创建TCP连接后,监听onopen事件即可:

const tcp = uni.requireNativePlugin('dc-tcp')
tcp.onopen = function() {
  console.log('TCP连接已建立')
  // 连接成功后发送数据
  tcp.send('Hello Server')
}

当TCP连接成功建立时,会自动触发onopen回调函数。


在 UniApp 中,TCP 客户端通过 uni.connectSocket 方法建立连接后,可以使用 onOpen 事件监听连接成功。以下是具体步骤和示例代码:

实现步骤:

  1. 创建 TCP 连接:使用 uni.connectSocket 配置服务器地址和端口。
  2. 监听 onOpen 事件:通过 onSocketOpen 方法监听连接成功。
  3. 处理连接逻辑:在回调函数中执行发送数据等操作。

示例代码:

// 创建 TCP 连接
const socketTask = uni.connectSocket({
  url: 'ws://your-server-ip:port', // 替换为实际 TCP 服务器地址
  success: () => {
    console.log('Socket 连接创建成功');
  },
  fail: (err) => {
    console.error('Socket 连接失败:', err);
  }
});

// 监听连接打开事件
uni.onSocketOpen((res) => {
  console.log('TCP 连接已打开', res);
  // 连接成功后发送数据示例
  uni.sendSocketMessage({
    data: 'Hello Server',
    success: () => {
      console.log('消息发送成功');
    }
  });
});

// 可选:监听消息接收
uni.onSocketMessage((res) => {
  console.log('收到服务器消息:', res.data);
});

// 监听错误
uni.onSocketError((err) => {
  console.error('Socket 错误:', err);
});

注意事项:

  • 协议限制:UniApp 的 connectSocket 默认使用 WebSocket(ws://wss://),如需原生 TCP,需使用条件编译调用原生 API(如 Android 的 Java Socket)。
  • 平台差异:H5 端仅支持 WebSocket,App 端可通过 plus.socket 实现原生 TCP(需自行封装)。
  • 连接管理:使用 socketTask 可主动关闭连接(socketTask.close())。

扩展原生 TCP 方法(App 端):

如需纯 TCP,可参考以下片段(仅 App 生效):

// #ifdef APP-PLUS
const socket = plus.socket.createSocket('tcp');
socket.connect('server-ip', port, () => {
  console.log('TCP 连接成功');
  socket.write('Hello TCP Server');
});
// #endif

根据实际需求选择合适方案,WebSocket 适用于跨平台,原生 TCP 适用于 App 端特定场景。

回到顶部