// socket绑定0.0.0.0作为本机IP地址,参考样例:
bindAllAddress() {
let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
let bindAddr: socket.NetAddress = {
address: '0.0.0.0', // 本端地址
port: 1234
};
udp.bind(bindAddr)
.then(() => {
console.info('bind success');
})
.catch((err: BusinessError) => {
console.error('bind fail', err);
});
} 如果是通过wifiManager.getIpInfo接口获取到的IpInfo.ipAddress地址,需要转换为IP常用格式。
// 获取WiFi IPV4地址,参考样例:
getWifiIp() {
let localAddress = this.resolveIP(wifiManager.getIpInfo().ipAddress) as string;
console.info(`localAddress: ${localAddress}`);
console.info(`IP校验结果为: ${this.checkIp(localAddress)}`);
}
resolveIP(ip: number): string {
if (ip < 0 || ip > 0xFFFFFFFF) {
console.info('The number is not normal!');
}
return (ip >>> 24) + '.' + (ip >> 16 & 0xFF) + '.' + (ip >> 8 & 0xFF) + '.' + (ip & 0xFF);
}
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);
} bindWithoutRandomPort(address: socket.NetAddress) {
let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
udp.bind(address, (error: BusinessError) => {
if (error) {
console.error(`:${JSON.stringify(error)}`);
return;
}
if (!address.port) {
console.info('应用绑定成功');
return;
}
udp.getLocalAddress().then((localAddress: socket.NetAddress) => {
console.info(`成功获取UDP Socket地址Address=${JSON.stringify(localAddress)}`);
if (address.port === localAddress.port) {
console.info('应用绑定的端口正确');
} else {
console.error(`应用重新绑定了另外的端口: ${localAddress.port}`);
// ...
}
}).catch((err: Error) => {
console.error(`获取UDP Socket地址失败: ${JSON.stringify(err)}`);
});
});
} 完整示例参考如下:
import { wifiManager } from '@kit.ConnectivityKit';
import { socket } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';
@Entry
@Component
struct SocketBindExample {
// 获取WiFi IPV4地址,参考样例:
getWifiIp() {
let localAddress = this.resolveIP(wifiManager.getIpInfo().ipAddress) as string;
console.info(`localAddress: ${localAddress}`);
console.info(`IP校验结果为: ${this.checkIp(localAddress)}`);
}
resolveIP(ip: number): string {
if (ip < 0 || ip > 0xFFFFFFFF) {
console.info('The number is not normal!');
}
return (ip >>> 24) + '.' + (ip >> 16 & 0xFF) + '.' + (ip >> 8 & 0xFF) + '.' + (ip & 0xFF);
}
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);
}
// socket绑定0.0.0.0作为本机IP地址,参考样例:
bindAllAddress() {
let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
let bindAddr: socket.NetAddress = {
address: '0.0.0.0', // 本端地址
port: 1234
};
udp.bind(bindAddr)
.then(() => {
console.info('bind success');
})
.catch((err: BusinessError) => {
console.error('bind fail', err);
});
}
bindWithoutRandomPort(address: socket.NetAddress) {
let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
udp.bind(address, (error: BusinessError) => {
if (error) {
console.error(`:${JSON.stringify(error)}`);
return;
}
if (!address.port) {
console.info('应用绑定成功');
return;
}
udp.getLocalAddress().then((localAddress: socket.NetAddress) => {
console.info(`成功获取UDP Socket地址Address=${JSON.stringify(localAddress)}`);
if (address.port === localAddress.port) {
console.info('应用绑定的端口正确');
} else {
console.error(`应用重新绑定了另外的端口: ${localAddress.port}`);
// ...
}
}).catch((err: Error) => {
console.error(`获取UDP Socket地址失败: ${JSON.stringify(err)}`);
});
});
}
build() {
Column({ space: 16 }) {
Button('获取WiFi分配的IP地址').onClick(() => {
this.getWifiIp();
});
Button('通配符绑到所有本地地址').onClick(() => {
this.bindAllAddress();
});
Button('绑定指定端口').onClick(() => {
this.bindWithoutRandomPort({ address: '::', family: 2, port: 3000 });
});
}.width('100%').height('100%').justifyContent(FlexAlign.Center);
}
}