首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
  • M4-R1

    • 一、简介

      • M4-R1简介
    • 二、快速上手

      • 01 OpenHarmony概述
      • 02 镜像烧录
      • 03 应用开发快速上手
      • 04 设备开发快速上手
    • 三、应用开发

      • 01 ArkUI

        • 1 ArkTS语言简介
        • 2 UI 组件-Row 容器介绍
        • 3 UI 组件-Column 容器介绍
        • 4 UI 组件-Text 组件
        • 5 UI 组件-Toggle 组件
        • 6 UI 组件-Slider 组件
        • 7 UI 组件-Animation 组件&Transition 组件
      • 02 资料获取

        • 1 OpenHarmony 官方资料
      • 03 开发须知

        • 1 Full-SDK替换教程
        • 2 引入和使用三方库
        • 3 HDC调试
        • 4 命令行恢复出厂模式
        • 5 升级App为system权限
      • 04 构建第一个应用

        • 1 构建第一个ArkTs应用-HelloWorld
      • 05 案例

        • 01 串口调试助手应用案例
        • 02 手写板应用案例
        • 03 数字时钟应用案例
        • 04 WIFI 信息获取应用案例
    • 四、设备开发

      • 01 环境搭建
      • 02 下载源码
      • 03 编译源码
    • 五、外设与接口

      • 树莓派接口
      • GPIO 接口
      • I2C 接口
      • SPI通信
      • PWM控制
      • 串口通讯
      • TF Card
      • 屏幕
      • 触摸
      • 音频
      • RTC
      • Ethernet
      • M.2
      • MINI-PCIE
      • Camera
      • WIFI&BT
      • 树莓派拓展板
    • 六、资料下载

      • 资料下载
  • M5-R1

    • 一、简介

      • M5-R1简介
    • 二、快速上手

      • 镜像烧录
      • 环境搭建
      • 下载源码
    • 三、外设与接口

      • 树莓派接口
      • GPIO 接口
      • I2C 接口
      • SPI通信
      • PWM控制
      • 串口通讯
      • TF Card
      • 屏幕
      • 触摸
      • 音频
      • RTC
      • Ethernet
      • M.2
      • MINI-PCIE
      • Camera
      • WIFI&BT
    • 四、资料下载

      • 资料下载

04 WIFI 信息获取应用案例

1. 案例功能简述

该案例的核心功能是实现鸿蒙设备以太网的动/静态IP模式切换与网络配置管理,具体如下:

  • 网口信息获取:自动检测设备活跃的以太网接口(如 eth0),并获取当前网口的IP、网关、子网掩码等配置。
  • IP模式切换:通过界面按钮,在动态IP(由路由器DHCP自动分配IP)和静态IP(手动输入指定IP)模式间切换。
  • 配置生效验证:切换模式或修改静态IP后,实时更新界面显示并输出日志,验证网络配置是否成功应用。

2. 案例代码展示

import ethernet from '@ohos.net.ethernet'
import { BusinessError } from '@ohos.base';

@Entry
@Component
struct Index {
  @State message: string = '以太网Demo';
  private  TAG : string = 'ent_Demo'
  @State entModeTest : string = '当前动态Ip'
  @State entName : string = "eth0"
  @State entModeStatus : boolean = true;//动/静态Ip的判断
  @State entMsg : string = ''
  @State entIp : string = ''
  @State entRoute : string = ''
  @State entGateway : string = ''
  @State entMask : string = ''
  @State entDNS : string = ''
  @State entMode : number = 1;

  aboutToAppear(): void {
    this.getAllActiveIfaces();
    this.getIfaceConfig();
  }

  setIfaceConfig(){
    let config: ethernet.InterfaceConfiguration = {
      mode: this.entMode,
      ipAddr: this.entIp,
      route: this.entRoute,
      gateway: this.entGateway,
      netMask: this.entMask,
      dnsServers: this.entDNS
    };

    const setConfigPromise = ethernet.setIfaceConfig("eth0", config);

    setConfigPromise.then(() => {
      console.log(this.TAG,"setIfaceConfig promise ok");
    }).catch((error: BusinessError)  => {
      console.error(this.TAG,"setIfaceConfig promise error = " + JSON.stringify(error));
    });
  }

  getIfaceConfig(){
    ethernet.getIfaceConfig(this.entName).then((data: ethernet.InterfaceConfiguration) => {
      console.log(this.TAG,"getIfaceConfig promise mode = " + data.mode);
      console.log(this.TAG,"getIfaceConfig promise ipAddr = " + JSON.stringify(data.ipAddr));
      console.log(this.TAG,"getIfaceConfig promise route = " + JSON.stringify(data.route));
      console.log(this.TAG,"getIfaceConfig promise gateway = " + JSON.stringify(data.gateway));
      console.log(this.TAG,"getIfaceConfig promise netMask = " + JSON.stringify(data.netMask));
      console.log(this.TAG,"getIfaceConfig promise dnsServers = " + JSON.stringify(data.dnsServers));
      if (data.mode == 0) {
        this.entModeStatus = false;
      }else {
        this.entModeStatus = true
      }
        this.entMode = data.mode
        this.entMsg = JSON.stringify(data).toString();
        this.entRoute = data.route.toString();
        this.entGateway = data.gateway.toString();
        this.entMask = data.netMask.toString();
        this.entDNS = data.dnsServers.toString();
    }).catch((error: BusinessError) => {
      console.error(this.TAG,"getIfaceConfig promise error = " + JSON.stringify(error));
    });
  }

  isIfaceActive(){
    ethernet.isIfaceActive("eth0").then((data: number) => {
      console.log(this.TAG,"isIfaceActive promise = " + JSON.stringify(data));
    }).catch((error: BusinessError) => {
      console.log(this.TAG,"isIfaceActive promise error = " + JSON.stringify(error));
    });
  }

  getAllActiveIfaces(){
    ethernet.getAllActiveIfaces().then((data: string[]) => {
      console.log(this.TAG,"getAllActiveIfaces promise data.length = " + JSON.stringify(data.length));
      if (JSON.stringify(data.length) == '1' ) {
        console.log(this.TAG,'data.length')
      }
      for (let i = 0; i < data.length; i++) {
        console.log(this.TAG,"getAllActiveIfaces promise  = " + JSON.stringify(data[i]));
      }
    }).catch((error:BusinessError) => {
      console.error(this.TAG,"getAllActiveIfaces promise error = " + JSON.stringify(error));
    });
  }

  build() {
    Column() {
      Text(this.message)
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .padding(20)
      Button('点击切换动/静态IP')
        .onClick(()=>{
          if (this.entMode == 0) {
            this.entMode = 1;
            this.entModeTest = '当前动态Ip'
            this.entModeStatus = true;
          }else{
            this.entMode = 0;
            this.entModeTest = '当前静态Ip'
            this.entModeStatus = false;
          }
          this.setIfaceConfig();
          this.getIfaceConfig();
        })
        if (this.entModeStatus){
          Column(){
            TextInput({placeholder : '静态Ip'})
              .onChange((value : string)=>{
                this.entIp = value
              })
          }
          .height(80)
          .width(300)
          .padding(10)
          .margin(10)
        }
      Text(this.entModeTest)
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .padding(30)
      Column(){
        Text('网口信息')
        Blank()
        Text(this.entMsg)
      }
      .height(80)
      .padding(10)
    }
    .width('100%')
  }
}

3. 案例源码及 HAP 包获取

3.1 案例源码获取

1)百度网盘资料中下载 EntDemo_API12.zip。 链接: 提取码:

ENT

备注:

项目路径:
ShimetaPi开源鸿蒙资料>SC-3568HA>05-开发资料>01-OpenHarmory 开发资料>APP Demo>EntDemo_API12.zip

2)解压压缩包后通过 DevEco Studio 打开工程即可查看源码。

3.2 案例 HAP 包获取

1)百度网盘资料中下载 EntDemo_API12.hap。 链接: 提取码:

ENT

备注:

文件路径:
ShimetaPi开源鸿蒙资料>SC-3568HA>05-开发资料>01-OpenHarmory 开发资料>APP Demo>Hap_Package>EntDemo_API12.hap

2)案例通过 HAP 进行安装的过程同前面的串口助手和手写板案例一致,此处不再赘述。

4. 案例功能介绍

1)点击桌面图标进入到应用界面。

ENT

备注:

使用该应用时,需将开发板用网线与电脑或是路由器相连。

2)应用界面如下:

ENT

此时默认为动态IP显示,底下网口信息部分显示当前网口的配置(IP、网关、子网掩码等)。

3)在 DevEco studio 软件中的日志处可以查看这些信息,方式如下:

ENT

网口信息中包含了两部分内容,分别是当前所有活跃的网口以及当前网口的配置信息。

  • data.length = 1 和 eth0 说明设备有 1 个活跃网口,名称为eth0(与代码中entName一致,无需修改)。
  • 异常:若 data.length = 0,检查网线是否插紧、路由器是否通电,或设备网口是否损坏。
  • mode = 1 表示当前是动态 IP 模式(1 = 动态,0 = 静态),ipAddr 是路由器通过 DHCP 分配的 IP,gateway 是路由器网关,这些值非空说明初始化成功。

4)应用程序还支持动/静态IP的切换,方式如下:
①在“静态ip”处填写网口IP,以“192.168.102.43”为例;
②单击切换按钮,此时即完成了由动态IP到静态IP的切换,最底下的网口信息处会同步更新信息。

ENT

5)在 DevEco studio 软件中的日志处同样可以查看这些信息。

显示“ent _Demo setIfaceconfig promise ok”说明切换成功

ENT

同时,所显示的网口信息亦会同步更新,“ipAddr”处应为自行设置的IP。

ENT

备注:

常见错误解读:

  • Permission denied(权限被拒绝):检查 module.json5 中是否添加了 SET_NETWORK_INFO 和 GET_NETWORK_INFO 权限。
  • Interface not found(接口未找到):网口名称可能不是eth0,需通过设备命令行 ifconfig 查看实际网口名称(如eth1),并修改代码中entName变量。
  • Invalid configuration(配置无效):静态 IP 格式错误(如192.168.1.256),或网关与 IP 不在同一网段。
在 GitHub 上编辑此页
上次更新:
贡献者: ShiMetaPi, jxc
Prev
03 数字时钟应用案例