HarmonyOS 鸿蒙Next socket 绑定IP 问题

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next socket 绑定IP 问题

在tcp socket 连接中,需要 bind() 来绑定自己的IP,如何可以获取到自己的IP , 如果不绑定是不是没法收到message 消息

2 回复
获取ip可以参考 https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-net-connection-V5 使用connection.getAddressesByName

tcp可以参考

import { socket } from '[@kit](/user/kit).NetworkKit';

import { BusinessError } from '[@kit](/user/kit).BasicServicesKit';

// 创建一个TCPSocketServer连接,返回一个TCPSocketServer对象。

let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();

// 绑定本地IP地址和端口,进行监听

let ipAddress : socket.NetAddress = {} as socket.NetAddress;

ipAddress.address = "192.168.xxx.xxx";

ipAddress.port = 4651;

tcpServer.listen(ipAddress).then(() => {

  console.log('listen success');

}).catch((err: BusinessError) => {

  console.log('listen fail');

});

class SocketInfo {

  message: ArrayBuffer = new ArrayBuffer(1);

  remoteInfo: socket.SocketRemoteInfo = {} as socket.SocketRemoteInfo;

}

// 订阅TCPSocketServer的connect事件

tcpServer.on("connect", (client: socket.TCPSocketConnection) => {

  // 订阅TCPSocketConnection相关的事件

  client.on("close", () => {

    console.log("on close success");

  });

  client.on("message", (value: SocketInfo) => {

    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));

    }

    console.log("received message--:" + str);

    console.log("received address--:" + value.remoteInfo.address);

    console.log("received family--:" + value.remoteInfo.family);

    console.log("received port--:" + value.remoteInfo.port);

    console.log("received size--:" + value.remoteInfo.size);

  });

  // 向客户端发送数据

  let tcpSendOptions : socket.TCPSendOptions = {} as socket.TCPSendOptions;

  tcpSendOptions.data = 'Hello, client!';

  client.send(tcpSendOptions).then(() => {

    console.log('send success');

  }).catch((err: Object) => {

    console.error('send fail: ' + JSON.stringify(err));

  });

  // 关闭与客户端的连接

  client.close().then(() => {

    console.log('close success');

  }).catch((err: BusinessError) => {

    console.log('close fail');

  });

  // 取消TCPSocketConnection相关的事件订阅

  setTimeout(() => {

    client.off("message");

    client.off("close");

  }, 10 * 1000);

});

// 取消TCPSocketServer相关的事件订阅

setTimeout(() => {

  tcpServer.off("connect");

}, 30 * 1000);

针对HarmonyOS 鸿蒙Next socket绑定IP问题,以下是一些专业解答:

在HarmonyOS中,进行Socket连接并绑定IP时,可能遇到的问题及原因主要包括:

  1. 端口占用:确保指定的端口号没有被其他应用程序或服务占用。
  2. 权限问题:检查应用是否有足够的权限来访问网络或绑定特定端口。
  3. IP地址无效:检查绑定的IP地址是否正确且有效。如果设置为0.0.0.0,可以尝试改为具体的IP地址或保留以监听所有可用网络接口。
  4. 错误码2301099:出现此错误码通常表示尝试绑定的IP地址在当前网络接口上不可用或未配置。应检查指定的IP地址是否属于本机网络接口的有效IP。
  5. 防火墙或安全软件:确认系统或安全软件没有阻止Socket操作。

若遇到以上问题,建议逐一排查并尝试解决。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部