一、鸿蒙网络编程概述

大家好,我是你们的老朋友。今天咱们聊聊鸿蒙网络编程。说实话,网络编程这块我踩过不少坑,尤其是刚接触鸿蒙那会儿。不过别担心,我会把这些经验都分享出来,让你少走弯路。

1.1 鸿蒙系统网络架构简介

鸿蒙系统的网络架构,说白了就是一套分层设计。我习惯把它想象成一座大楼——底层是地基,上层是房间。

鸿蒙的网络架构主要分为三层:

  • 应用层:你写的代码就在这层。比如发HTTP请求、WebSocket通信。
  • 框架层:系统提供的网络API,帮你封装好底层细节。
  • 内核层:真正的网络协议栈,TCP/IP、UDP都在这里跑。

嗯,这里要注意一点。鸿蒙的网络框架和Android不太一样。它用的是自研的软总线技术,可以实现设备间的无缝连接。我在做多设备协同项目时,就深刻体会到了这一点——手机和手表之间的数据传输,几乎感觉不到延迟。

核心要点:鸿蒙网络架构的核心是「分布式软总线」。它让不同设备像一台设备一样通信。你想想看,这有多方便?

下面这张图是我自己画的,帮你快速理解鸿蒙网络架构的整体脉络:

鸿蒙系统网络架构图 应用层 HTTP请求 · WebSocket · Socket通信 · 文件上传下载 框架层(网络API) @ohos.net.http · @ohos.net.socket · 网络状态管理 内核层(协议栈) TCP/IP · UDP · DNS解析 · 分布式软总线 图:鸿蒙网络编程三层架构

1.2 网络编程的应用场景

你可能会问:学网络编程到底能干啥?我举个例子你就明白了。

去年我做了一个智能家居App,需要让手机控制家里的灯和空调。这背后就是网络编程在干活——手机发一条指令,设备收到后执行。说白了,没有网络编程,万物互联就是个空话。

常见的应用场景包括:

  1. 数据获取:从服务器拉取新闻、天气、用户信息等。
  2. 文件传输:上传头像、下载附件、同步文件。
  3. 实时通信:聊天、视频通话、游戏对战。
  4. 设备控制:智能家居、车联网、工业控制。
  5. 数据上报:传感器数据、日志、统计信息。

我的经验:刚开始做网络编程时,我总想着把所有功能都塞到一个请求里。结果呢?代码又乱又难调试。后来我学乖了——一个请求只做一件事,清晰又高效。

1.3 网络权限配置

嗯,这里要敲黑板了。鸿蒙对权限管理非常严格。你如果不配置权限,网络请求根本发不出去。我曾经就因为这个排查了半天,最后发现是权限没配好。

鸿蒙的网络权限配置在 module.json5 文件中。你需要添加以下配置:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET",
        "reason": "需要访问网络获取数据",
        "usedScene": {
          "abilities": ["MainAbility"],
          "when": "always"
        }
      }
    ]
  }
}

这里有几个关键点:

  • INTERNET权限:最基本的网络访问权限,必须添加。
  • reason字段:说明为什么需要这个权限。鸿蒙在应用上架时会审核这个描述。
  • usedScene:指定在哪个Ability中使用,以及使用时机(always或inuse)。

避坑指南:我曾经在调试时发现,即使配了INTERNET权限,某些网络请求还是失败。后来才意识到——鸿蒙还有「网络安全配置」的概念。如果你需要访问HTTP(非HTTPS)的地址,还得在 res/raw/network_security_config.json 中配置允许明文流量。

网络安全配置示例:

{
  "network_security_config": {
    "base_config": {
      "cleartext_traffic_permitted": true
    },
    "domains": [
      {
        "domains": ["example.com", "*.example.com"],
        "cleartext_traffic_permitted": true
      }
    ]
  }
}

你想想看,如果没配这个,你的HTTP请求就会直接被系统拦截。所以我的习惯是:开发阶段先配好所有权限,上线前再收紧。

权限名称 用途 是否必须
ohos.permission.INTERNET 允许应用访问网络
ohos.permission.GET_NETWORK_INFO 获取网络状态信息 按需
ohos.permission.SET_NETWORK_INFO 修改网络状态 按需

总结一下:网络权限配置是网络编程的第一步。配好了,后面才能顺利跑起来。我建议你每次新建项目时,先把权限配好,省得后面忘了。

好了,这一章的内容就到这里。记住:网络编程没那么神秘,把架构理清楚,权限配好,剩下的就是写代码了。下一章咱们会深入HTTP请求的具体实现,到时候见!

专注资料整理