HarmonyOS学习路之开发篇—网络与连接(网络管理)

本文涉及的产品
数据传输服务DTS,同步至DuckDB 3个月
简介: 网络管理开发概述HarmonyOS网络管理模块主要提供以下功能:

网络管理开发概述

HarmonyOS网络管理模块主要提供以下功能:


数据连接管理:网卡绑定,打开URL,数据链路参数查询。

数据网络管理:指定数据网络传输,获取数据网络状态变更,数据网络状态查询。

流量统计:获取蜂窝网络、所有网卡、指定应用或指定网卡的数据流量统计值。

HTTP缓存:有效管理HTTP缓存,减少数据流量。

创建本地套接字:实现本机不同进程间的通信,目前只支持流式套接字。

约束与限制

使用网络管理模块的相关功能时,需要请求相应的权限。


image.png

使用当前网络打开一个URL链接

场景介绍

应用使用当前的数据网络打开一个URL链接。

接口说明

应用使用当前网络打开一个URL链接,所使用的接口说明如下。

表1 网络管理功能的主要接口

image.png

开发步骤

调用NetManager.getInstance(Context)获取网络管理的实例对象。

调用NetManager.getDefaultNet()获取默认的数据网络。

调用NetHandle.openConnection()打开一个URL。

通过URL链接实例访问网站。

NetManager netManager = NetManager.getInstance(context);
if (!netManager.hasDefaultNet()) {
    return;
}
NetHandle netHandle = netManager.getDefaultNet();
// 可以获取网络状态的变化
NetStatusCallback callback = new NetStatusCallback() {
    // 重写需要获取的网络状态变化的override函数
};
netManager.addDefaultNetStatusCallback(callback);
// 通过openConnection来获取URLConnection
HttpURLConnection connection = null;
try {
    String urlString = "EXAMPLE_URL"; // 开发者根据实际情况自定义EXAMPLE_URL
    URL url = new URL(urlString);
    URLConnection urlConnection = netHandle.openConnection(url,
                java.net.Proxy.NO_PROXY);
    if (urlConnection instanceof HttpURLConnection) {
        connection = (HttpURLConnection) urlConnection;
        connection.setRequestMethod("GET");
        connection.connect();
        // 之后可进行url的其他操作
    }
} catch(IOException e) {
    HiLog.error(TAG, "exception happened.");
} finally {
    if (connection != null){
        connection.disconnect();
    }
}

使用当前网络进行Socket数据传输

场景介绍

应用使用当前的数据网络进行Socket数据传输。

接口说明

应用使用当前网络进行Socket数据传输,所使用的接口说明如下。

表1 网络管理功能的主要接口

image.png

开发步骤

  1. 1.调用NetManager.getInstance(Context)获取网络管理的实例对象。
  2. 2.调用NetManager.getDefaultNet()获取默认的数据网络。
  3. 3.调用NetHandle.bindSocket()绑定网络。
  4. 4.使用socket发送数据。
NetManager netManager = NetManager.getInstance(context);
if (!netManager.hasDefaultNet()) {
    return;
}
NetHandle netHandle = netManager.getDefaultNet();
// 通过Socket绑定来进行数据传输
DatagramSocket socket = null;
try {
    InetAddress address = netHandle.getByName("www.EXAMPLE.com"); // 开发者根据实际情况自定义EXAMPLE_URL
    socket = new DatagramSocket();
    netHandle.bindSocket(socket);
    byte[] buffer = new byte[1024]; 
    DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, port); // port为连接UDP Socket时自行指定的端口
    // buffer赋值
    // 发送数据
    socket.send(request);
} catch(IOException e) {
    HiLog.error(TAG, "exception happened.");
}finally {
    if (socket != null) {
        socket.close();
    }
}

使用指定网络进行数据访问

场景介绍

应用可以调用API接口来使用指定网络进行数据传输。在进行数据传输前,需要先建立自定义的网络类型。

接口说明

应用使用指定网络进行数据访问,所使用的接口说明如下。

表1 网络管理功能的主要接口

image.png

开发步骤

  1. 1.调用NetSpecifier.Builder()构建指定数据网络的实例。
  2. 2.调用NetManager.setupSpecificNet()建立数据网络,通过callback获取网络状态变化。
  3. 3.进行数据发送。
NetManager netManager = NetManager.getInstance(context);
private class MmsCallback extends NetStatusCallback {
    @Override
    public void onAvailable(NetHandle netHandle) {
        // 通过setAppNet把后续应用所有的请求都通过该网络进行发送
        netManager.setAppNet(netHandle);
        HttpURLConnection connection = null;
        try {
            String urlString = "EXAMPLE_URL"; // 开发者根据实际情况自定义EXAMPLE_URL
            URL url = new URL(urlString);
            URLConnection urlConnection = netHandle.openConnection(url, java.net.Proxy.NO_PROXY);
            if (urlConnection instanceof HttpURLConnection) {
                connection = (HttpURLConnection) urlConnection;
            }
            connection.setRequestMethod("GET");
            connection.connect();
            // 之后可进行url的其他操作
        } finally {
            if(connection != null){
                connection.disconnect();
            }
        }
        // 如果业务执行完毕,可以停止获取
        netManager.removeNetStatusCallback(this);
    }
}
MmsCallback callback = new MmsCallback();
// 配置一个彩信类型的蜂窝网络
NetSpecifier req = new NetSpecifier.Builder()
    .addCapability(NetCapabilities.NET_CAPABILITY_MMS)
    .addBearer(NetCapabilities.BEARER_CELLULAR)
    .build();
// 建立数据网络,通过callback获取网络变更状态
netManager.setupSpecificNet(req, callback);

流量统计

场景介绍

应用通过调用API接口,可以获取蜂窝网络、所有网卡、指定应用或指定网卡的数据流量统计值。

接口说明

应用进行流量统计,所使用的接口主要由DataFlowStatistics提供。

表1 DataFlowStatistics的主要接口

image.png

开发步骤

调用DataFlowStatistics的接口可进行流量统计,以统计指定应用进程的流量为例。

long rx = DataFlowStatistics.getUidRxBytes(uid);
long tx = DataFlowStatistics.getUidTxBytes(uid);
// 进行数据收发
// 统计流量
rx = DataFlowStatistics.getUidRxBytes(uid) - rx;
tx = DataFlowStatistics.getUidTxBytes(uid) - tx;

管理HTTP缓存

场景介绍

应用重复打开一个相同网页时,可以优先从缓存文件里读取内容,从而减少数据流量,降低设备功耗,提升应用性能。


接口说明

管理HTTP缓存的功能主要由HttpResponseCache类提供。


表1 HttpResponseCache的主要接口


image.png

开发步骤

  1. 1.配置缓存目录及最大缓存空间。
  2. 2.保存缓存。
  3. 3.关闭缓存。
// 初始化时设置缓存目录dir及最大缓存空间
HttpResponseCache.install(dir, 10 * 1024 * 1024);
// 访问URL
// 为确保缓存保存到文件系统可以执行flush操作
HttpResponseCache.getInstalled().flush();
// 结束时关闭缓存
HttpResponseCache.getInstalled().close();
相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
5月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
192 0
|
4月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
7月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
402 61
|
4月前
Vite使用svg-企业级开发(支持本地svg和网络svg渲染)
本教程介绍如何在Vite项目中集成SVG图标插件。首先安装`vite-plugin-svg-icons`,配置插件指向SVG图标目录,并注册全局组件。接着创建SVG图标组件,支持内部图标与外部图片展示。通过简单配置,即可在页面中灵活使用各类SVG图标,提升开发效率。
232 0
|
7月前
|
索引 容器
120. [HarmonyOS NEXT 实战案例:教育应用] 基础篇 - 垂直分割布局打造课程学习平台
在本案例中,我们将使用以下HarmonyOS NEXT组件: | 组件名称 | 功能描述 | | ------------- | -------------------------------------- | | `ColumnSplit` | 垂直分割布局容器,将界面分为上下两部分 | | `Column` | 垂直布局容器,用于垂直排列子组件 | | `Row` | 水平布局容器,用于水平排列子组件 | | `Scroll` | 滚动容器,用于在有限空间内展
126 3
120. [HarmonyOS NEXT 实战案例:教育应用] 基础篇 - 垂直分割布局打造课程学习平台
|
7月前
|
UED 容器
122.[HarmonyOS NEXT 实战案例:教育应用] 高级篇 - 课程学习平台的高级布局与自适应设计
在前两篇教程中,我们学习了如何使用HarmonyOS NEXT的`ColumnSplit`组件构建课程学习平台的基本布局,以及如何添加交互功能和状态管理。本篇教程将进一步深入,讲解课程学习平台的高级布局技巧和自适应设计,使应用能够在不同尺寸的设备上提供一致且优质的用户体验。
174 1
122.[HarmonyOS NEXT 实战案例:教育应用] 高级篇 - 课程学习平台的高级布局与自适应设计
|
5月前
|
Windows
电脑显示有问题,电脑连接不上网络,电脑没声音,电脑链接不上打印机?驱动人生就能解决所有问题
电脑显示有问题,电脑连接不上网络,电脑没声音,电脑链接不上打印机?驱动人生就能解决所有问题
124 0
|
7月前
|
开发者
鸿蒙仓颉语言开发教程:网络请求和数据解析
本文介绍了在仓颉开发语言中实现网络请求的方法,以购物应用的分类列表为例,详细讲解了从权限配置、发起请求到数据解析的全过程。通过示例代码,帮助开发者快速掌握如何在网络请求中处理数据并展示到页面上,减少开发中的摸索成本。
鸿蒙仓颉语言开发教程:网络请求和数据解析
|
7月前
|
监控 安全 网络协议
恶意软件无处逃!国内版“Manus”AiPy开发Windows沙箱工具,进程行为+网络传输层级监控! 头像 豪气的
NImplant.exe 是一款后渗透测试工具,可实现远程管理与持久化控制。其优点包括无文件技术、加密通信和插件扩展,但也存在被检测风险及配置复杂等问题。为深入分析其行为,我们基于 aipy 开发了 Windows 沙箱工具,针对桌面上的 NImplant.exe 进行多维度分析,涵盖进程行为、网络连接(如 TCP 请求、目标 IP/域名)、文件控制等,并生成传输层监控报告与沙箱截图。结果显示,aipy 工具响应迅速,报告清晰易读,满足分析需求。
|
8月前
|
JSON 缓存 程序员
玩转HarmonyOS NEXT网络请求:从新手到高手的实战秘籍
本文以通俗易懂的方式讲解了HarmonyOS网络请求的核心知识,从基础概念到实战技巧,再到进阶优化,帮助开发者快速上手。通过“点外卖”的类比,形象解释了HTTP请求方法(如GET、POST)和JSON数据格式的作用。同时,提供了封装工具类的示例代码,简化重复操作,并分享了常见问题的解决方法(如权限配置、参数格式、内存泄漏等)。最后,还探讨了如何通过拦截器、缓存机制和重试机制提升请求功能。无论你是新手还是进阶开发者,都能从中受益,快动手实现一个新闻App试试吧!
503 5

热门文章

最新文章