HarmonyOS 鸿蒙Next socket连接时,需要绑定本机ip地址和端口,请问如何获取自身ip地址和端口

HarmonyOS 鸿蒙Next socket连接时,需要绑定本机ip地址和端口,请问如何获取自身ip地址和端口 socket连接时,需要绑定本机ip地址和端口,请问如何获取自身ip地址和端口

7 回复
let localAddress = resolveIP(wifi.getIpInfo().ipAddress);

export function resolveIP(ip: number): string {
    if (ip < 0 || ip > 0xFFFFFFFF) {
        throw ('The number is not normal!');
    }
    return (ip >>> 24) + '.' + (ip >> 16 & 0xFF) + '.' + (ip >> 8 & 0xFF) + '.' + (ip & 0xFF);
}

export function checkIp(ip: string): boolean {
    let ipRegex = /^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$/;
    return ipRegex.test(ip);
}

更多关于HarmonyOS 鸿蒙Next socket连接时,需要绑定本机ip地址和端口,请问如何获取自身ip地址和端口的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


API9 TCP.connect() 报错....2301088    Socket operation on non-socket

怎么破
API9 TCP.connect() 报错....2301088 Socket operation on non-socket

怎么破

作为客户端连接,不需要必须先bind操作的,有官方文档资料,可以直接调用tcp.connect

cke_755.png

import connection from '@ohos.net.connection';
import hilog from '@ohos.hilog';

const TAG: string = 'testTag'

/**
* 获取设备ip
*/
async function getLocalIp() {
try {
hilog.info(0x00000, TAG, '判断是否存在激活的网络连接');
let hasNet = connection.hasDefaultNetSync()
if (hasNet) {
hilog.info(0x00000, TAG, '存在默认激活的网络');
} else {
hilog.error(0x00000, TAG, '不存在激活的网络');
return
}

let handleResult = await connection.getDefaultNet()
if (handleResult) {
let connectionProperties = await connection.getConnectionProperties(handleResult)
if (connectionProperties && connectionProperties.linkAddresses) {
connectionProperties.linkAddresses.forEach((address: connection.LinkAddress, index: number) => {
hilog.info(0x00000, TAG, '索引:' + index + ',值:' + JSON.stringify(address));
})
}
}
} catch (e) {
hilog.error(0x00000, TAG, `获取网络信息出现异常,异常信息 %{public}s`, JSON.stringify(e) ?? '');
}
}

在HarmonyOS(鸿蒙Next)中,获取本机IP地址和端口可以通过NetAddressSocket类实现。具体步骤如下:

  1. 获取本机IP地址: 使用NetAddress类的getLocalHost方法获取本机IP地址。

    let netAddress = socket.getLocalHost();
    let ipAddress = netAddress.address;
    
  2. 获取本机端口: 在创建Socket连接时,可以通过Socket类的bind方法绑定端口,并通过getLocalPort方法获取绑定的端口号。

    let socket = new socket.Socket();
    socket.bind({ address: ipAddress, port: 0 }); // 端口为0时,系统自动分配
    let port = socket.getLocalPort();
    
回到顶部