HarmonyOS鸿蒙Next中Socket同步处理的方法

HarmonyOS鸿蒙Next中Socket同步处理的方法 咨询描述: socket初始化、收发数据,需要同步的return,现在都是异步,之前说的是加Promise,现在看来也是不太行的。async/await 这种方式也试过,还是异步操作

3 回复

1、当前js接口返回的就是promise,这个是现状。如果要通过native调用js接口,只能接受这种调用方式的复杂度。

2、或者将native侧处理的逻辑封装到js函数,通过js侧的await语法糖实现JS侧的同步调用,js主动查下natvie的方式验证是否继续往下一个流程执行。

更多关于HarmonyOS鸿蒙Next中Socket同步处理的方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,Socket同步处理主要依赖于@ohos.net.socket模块。该模块提供了同步Socket通信的能力,支持TCP和UDP协议。

  1. 创建Socket对象:使用socket.constructTCPSocketInstance()socket.constructUDPSocketInstance()方法创建TCP或UDP Socket对象。

  2. 绑定地址和端口:通过bind()方法绑定本地地址和端口。TCP Socket需要在连接前绑定,UDP Socket则可以直接发送数据。

  3. 连接服务器(TCP):TCP Socket使用connect()方法连接到服务器,指定服务器的IP地址和端口。

  4. 发送数据:使用send()方法发送数据,支持同步发送。TCP Socket在连接后发送,UDP Socket在绑定后发送。

  5. 接收数据:使用recv()方法同步接收数据。TCP Socket在连接后接收,UDP Socket在绑定后接收。

  6. 关闭Socket:使用close()方法关闭Socket,释放资源。

示例代码:

import socket from '@ohos.net.socket';

// 创建TCP Socket
let tcpSocket = socket.constructTCPSocketInstance();

// 绑定本地地址和端口
tcpSocket.bind({ address: '192.168.1.100', port: 8080 }, (err) => {
    if (!err) {
        // 连接到服务器
        tcpSocket.connect({ address: '192.168.1.200', port: 8080 }, (err) => {
            if (!err) {
                // 发送数据
                tcpSocket.send('Hello Server', (err) => {
                    if (!err) {
                        // 接收数据
                        tcpSocket.recv((err, data) => {
                            if (!err) {
                                console.log('Received: ' + data);
                            }
                        });
                    }
                });
            }
        });
    }
});

// 关闭Socket
tcpSocket.close();

以上代码展示了如何在HarmonyOS鸿蒙Next中进行Socket同步处理。整个过程包括创建Socket、绑定地址和端口、连接服务器、发送和接收数据,最后关闭Socket。

在HarmonyOS鸿蒙Next中,Socket同步处理可以通过以下步骤实现:

  1. 创建Socket对象:使用new Socket()创建客户端Socket或new ServerSocket()创建服务器Socket。

  2. 建立连接:客户端通过connect()连接到服务器,服务器通过accept()等待客户端连接。

  3. 同步通信:使用InputStreamOutputStream进行数据读写。调用read()write()方法时,线程会阻塞直到操作完成。

  4. 关闭连接:通信结束后,调用close()关闭Socket。

注意:同步处理会阻塞线程,适合简单场景。复杂场景建议使用异步处理或线程池。

回到顶部