HarmonyOS鸿蒙Next中ets socket怎么实现服务端

HarmonyOS鸿蒙Next中ets socket怎么实现服务端 这是设备1-应用绑定socket,作为服务端的代码,log打印bind成功了,但是设备中查找端口接听,发现这个端口并没有监听。

public startSocketServer(ipAddress: string): void {
    Logger.info(TAG, "startSocketServer ipAddress:" + ipAddress);
    // 绑定IP地址和端口。
    let bindAddress = {
      address: ipAddress,
      port: this.PORT, // 绑定端口,如1234
      family: 1
    };
    // 创建一个TCPSocket连接,返回一个TCPSocket对象。
    let mSocket: socket.TCPSocket = socket.constructTCPSocketInstance();
    mSocket.bind(bindAddress, err => {
      if (err) {
        Logger.info(TAG, 'bind socket fail ' + JSON.stringify(err));
        return;
      }
      Logger.info(TAG, 'bind socket success');

      Logger.info(TAG, "onReceiveMsg");
      mSocket.on('message', value => {
        Logger.info(TAG, "on message")
        let buffer = value.message
        let dataView = new DataView(buffer)
        let str = ""
        for (let i = 0; i < dataView.byteLength; ++i) {
          str += String.fromCharCode(dataView.getUint8(i))
        }
        Logger.info(TAG, "onReceiveMsg:" + str + ",remoteInfo:" + JSON.stringify(value.remoteInfo))
      });
    });
}

这是设备2-应用对设备1进行连接,发送数据的代码,此时输入设备1 ip对设备1进行socket连接,但是connect失败了

public sendMsg(ipAddress: string, msg: string): void {
    Logger.info(TAG, "sendMsg ipAddress " + ipAddress + ",msg:" + msg);
    // 连接到指定的IP地址和端口。
    let connectAddress = {
      address: ipAddress,
      port: this.PORT, // 连接端口,如5678
      family: 1
    };
    // 创建一个TCPSocket连接,返回一个TCPSocket对象。
    let mSocket: socket.TCPSocket = socket.constructTCPSocketInstance();
    mSocket.connect({
      address: connectAddress,
      timeout: 6000
    }, err => {
      if (err) {
        Logger.info(TAG, 'connect socket fail ' + JSON.stringify(err));
        return;
      }
      Logger.info(TAG, 'connect socket success')
      // 发送数据
      let dataHeader: DataHeader = new DataHeader(DataType.TEXT, "");
      let sendMsg = dataHeader.toJsonStringWithSpilt() + msg;
      Logger.info(TAG, "sendMsg:" + sendMsg);
      mSocket.send({
        data: sendMsg
      }, err => {
        if (err) {
          Logger.info(TAG, 'sendMsg fail ' + JSON.stringify(err));
          return;
        }
        Logger.info(TAG, 'sendMsg success');
        mSocket.close().then(() => {
          Logger.info(TAG, 'close socket success');
        }).catch(error => {
          Logger.info(TAG, 'close socket failed,' + JSON.stringify(error));
        })
      })
    });
}

文档接口看不出什么东西,请问怎么实现ets的socket服务端呢?可以让多台设备进行socket数据接发。


更多关于HarmonyOS鸿蒙Next中ets socket怎么实现服务端的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

更多关于HarmonyOS鸿蒙Next中ets socket怎么实现服务端的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


兄弟,最近我也在研究本地实现服务化,本来准备用poco实现的,不过next版本有了,可以用open版本。 cke_1131.png

TCPSocket是客户端socket,没有listen等方法,无法作为服务端使用。

刚看了一下 OpenHarmony的文档,在4.0版本的socket模块提供了constructTCPSocketServerInstance()方法,可以生成TCPSocketServer 对象,TCPSocketServer 提供了listen方法,可以监听客户端连接。不知道HarmonyOS和OpenHarmony的版本对应关系,也没有HarmonyOSNext的权限,不知道从哪个版本开始提供constructTCPSocketServerInstance()方法。

next版本有了,

请问一下有结果了没有, 也遇到同样的问题

在HarmonyOS鸿蒙Next中,使用ets实现Socket服务端,可以通过@ohos.net.socket模块创建TCP或UDP服务端。以下是实现步骤:

  1. 导入模块import socket from '@ohos.net.socket';
  2. 创建Socket实例let tcpServer = socket.constructTCPSocketInstance();
  3. 绑定地址和端口tcpServer.bind({ address: '0.0.0.0', port: 8080 });
  4. 监听连接tcpServer.listen((err) => { if (!err) { console.log('Server listening...'); } });
  5. 接受客户端连接tcpServer.on('connect', (clientSocket) => { console.log('Client connected'); });
  6. 处理数据:通过clientSocket.on('message', (data) => { ... })接收数据,并通过clientSocket.write()发送响应。

确保在config.json中声明ohos.permission.INTERNET权限。

回到顶部