当前位置: 首页 > news >正文

鸿蒙开发(NEXT/API 12)【网络连接管理】 网络篇

简介

网络连接管理提供管理网络一些基础能力,包括WiFi/蜂窝/Ethernet等多网络连接优先级管理、网络质量评估、订阅默认/指定网络连接状态变化、查询网络连接信息、DNS解析等功能。

说明

为了保证应用的运行效率,大部分API调用都是异步的,对于异步调用的API均提供了callback和Promise两种方式,以下示例均采用promise函数。

基本概念

  • 网络生产者:数据网络的提供方,比如WiFi、蜂窝、Ethernet等。
  • 网络消费者:数据网络的使用方,比如应用或系统服务。
  • 网络探测:检测网络有效性,避免将网络从可用网络切换到不可用网络。内容包括绑定网络探测、DNS探测、HTTP探测及HTTPS探测。
  • 网络优选:处理多网络共存时选择最优网络。在网络状态、网络信息及评分发生变化时被触发。

约束

  • 开发语言:JS
  • 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

场景介绍

网络连接管理的典型场景有:

  • 接收指定网络的状态变化通知
  • 获取所有注册的网络
  • 根据数据网络查询网络的连接信息
  • 使用对应网络解析域名,获取所有IP

以下分别介绍具体开发方式。

接口说明

接口名描述
getDefaultNet(callback: AsyncCallback): void;获取一个含有默认网络的netId的NetHandle对象,使用callback回调
getGlobalHttpProxy(callback: AsyncCallback): void;获取网络的全局代理设置,使用callback回调
setGlobalHttpProxy(httpProxy: HttpProxy, callback: AsyncCallback): void;设置网络全局Http代理配置信息,使用callback回调
setAppHttpProxy(httpProxy: HttpProxy): void;设置网络应用级Http代理配置信息
getAppNet(callback: AsyncCallback): void;获取一个App绑定的包含了网络netId的NetHandle对象,使用callback回调
setAppNet(netHandle: NetHandle, callback: AsyncCallback): void;绑定App到指定网络,绑定后的App只能通过指定网络访问外网。使用callback回调
getDefaultNetSync(): NetHandle;使用同步方法获取默认激活的数据网络。可以使用getNetCapabilities去获取网络的类型、拥有的能力等信息。
hasDefaultNet(callback: AsyncCallback): void;检查默认数据网络是否被激活,使用callback回调
getAllNets(callback: AsyncCallback<Array>): void;获取所处于连接状态的网络的NetHandle对象列表,使用callback回调
getConnectionProperties(netHandle: NetHandle, callback: AsyncCallback): void;查询netHandle对应的网络的连接信息,使用callback回调
getNetCapabilities(netHandle: NetHandle, callback: AsyncCallback): void;获取netHandle对应的网络的能力信息,使用callback回调
isDefaultNetMetered(callback: AsyncCallback): void;检查当前网络上的数据流量使用是否被计量,使用callback方式作为异步方法
reportNetConnected(netHandle: NetHandle, callback: AsyncCallback): void;向网络管理报告网络处于可用状态,调用此接口说明应用程序认为网络的可用性(ohos.net.connection.NetCap.NET_CAPABILITY_VAILDATED)与网络管理不一致。使用callback回调
reportNetDisconnected(netHandle: NetHandle, callback: AsyncCallback): void;向网络管理报告网络处于不可用状态,调用此接口说明应用程序认为网络的可用性(ohos.net.connection.NetCap.NET_CAPABILITY_VAILDATED)与网络管理不一致。使用callback回调
getAddressesByName(host: string, callback: AsyncCallback<Array>): void;使用对应网络解析域名,获取所有IP,使用callback回调
enableAirplaneMode(callback: AsyncCallback): void;设置网络为飞行模式,使用callback回调
disableAirplaneMode(callback: AsyncCallback): void;关闭网络飞行模式,使用callback回调
createNetConnection(netSpecifier?: NetSpecifier, timeout?: number): NetConnection;返回一个NetConnection对象,netSpecifier指定关注的网络的各项特征,timeout是超时时间(单位是毫秒),netSpecifier是timeout的必要条件,两者都没有则表示关注默认网络
bindSocket(socketParam: TCPSocketUDPSocket, callback: AsyncCallback): void;
getAddressesByName(host: string, callback: AsyncCallback<Array>): void;使用对应网络解析域名,获取所有IP,使用callback回调
getAddressByName(host: string, callback: AsyncCallback): void;使用对应网络解析域名,获取一个IP,调用callbac
on(type: ‘netAvailable’, callback: Callback): void;订阅网络可用事件
on(type: ‘netCapabilitiesChange’, callback: Callback): void;订阅网络能力变化事件
on(type: ‘netConnectionPropertiesChange’, callback: Callback<{ netHandle: NetHandle, connectionProperties: ConnectionProperties }>): void;订阅网络连接信息变化事件
on(type: ‘netBlockStatusChange’, callback: Callback<{ netHandle: NetHandle, blocked: boolean }>): void;订阅网络阻塞状态事件,使用callback方式作为异步方法
on(type: ‘netLost’, callback: Callback): void;订阅网络丢失事件
on(type: ‘netUnavailable’, callback: Callback): void;订阅网络不可用事件
register(callback: AsyncCallback): void;订阅指定网络状态变化的通知
unregister(callback: AsyncCallback): void;取消订阅默认网络状态变化的通知

接收指定网络的状态变化通知

  1. 声明接口调用所需要的权限:ohos.permission.GET_NETWORK_INFO。

    此权限级别为normal,在申请权限前,请保证符合[权限使用的基本原则]

  2. 从@kit.NetworkKit中导入connection命名空间。

  3. 调用createNetConnection方法,指定网络能力、网络类型和超时时间(可选,如不传入代表默认网络;创建不同于默认网络时可通过指定这些参数完成),创建一个NetConnection对象。

  4. 调用该对象的on()方法,传入type和callback,订阅关心的事件。

  5. 调用该对象的register()方法,订阅指定网络状态变化的通知。

  6. 当网络可用时,会收到netAvailable事件的回调;当网络不可用时,会收到netUnavailable事件的回调。

  7. 当不使用该网络时,可以调用该对象的unregister()方法,取消订阅。

// 引入包名
import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';let netSpecifier: connection.NetSpecifier = {netCapabilities: {// 假设当前默认网络是WiFi,需要创建蜂窝网络连接,可指定网络类型为蜂窝网bearerTypes: [connection.NetBearType.BEARER_CELLULAR],// 指定网络能力为InternetnetworkCap: [connection.NetCap.NET_CAPABILITY_INTERNET]},
};// 指定超时时间为10s(默认值为0)
let timeout = 10 * 1000;// 创建NetConnection对象
let conn = connection.createNetConnection(netSpecifier, timeout);// 订阅指定网络状态变化的通知
conn.register((err: BusinessError, data: void) => {console.log(JSON.stringify(err));
});// 订阅事件,如果当前指定网络可用,通过on_netAvailable通知用户
conn.on('netAvailable', ((data: connection.NetHandle) => {console.log("net is available, netId is " + data.netId);
}));// 订阅事件,如果当前指定网络不可用,通过on_netUnavailable通知用户
conn.on('netUnavailable', ((data: void) => {console.log("net is unavailable, data is " + JSON.stringify(data));
}));// 当不使用该网络时,可以调用该对象的unregister()方法,取消订阅
conn.unregister((err: BusinessError, data: void) => {
});

获取所有注册的网络

  1. 声明接口调用所需要的权限:ohos.permission.GET_NETWORK_INFO。

    此权限级别为normal,在申请权限前,请保证符合[权限使用的基本原则]

  2. 从@kit.NetworkKit中导入connection命名空间。

  3. 调用getAllNets方法,获取所有处于连接状态的网络列表。

// 引入包名
import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';// 构造单例对象
export class GlobalContext {public netList: connection.NetHandle[] = [];private constructor() {}private static instance: GlobalContext;private _objects = new Map<string, Object>();public static getContext(): GlobalContext {if (!GlobalContext.instance) {GlobalContext.instance = new GlobalContext();}return GlobalContext.instance;}getObject(value: string): Object | undefined {return this._objects.get(value);}setObject(key: string, objectClass: Object): void {this._objects.set(key, objectClass);}
}// 获取所有处于连接状态的网络列表
connection.getAllNets().then((data: connection.NetHandle[]) => {console.info("Succeeded to get data: " + JSON.stringify(data));if (data) {GlobalContext.getContext().netList = data;}
});

根据数据网络查询网络的能力信息及连接信息

  1. 声明接口调用所需要的权限:ohos.permission.GET_NETWORK_INFO。

    此权限级别为normal,在申请权限前,请保证符合[权限使用的基本原则]

  2. 从@kit.NetworkKit中导入connection命名空间。

  3. 通过调用getDefaultNet方法,获取默认的数据网络(NetHandle);或者通过调用getAllNets方法,获取所有处于连接状态的网络列表(Array)。

  4. 调用getNetCapabilities方法,获取NetHandle对应网络的能力信息。能力信息包含了网络类型(蜂窝网络、Wi-Fi网络、以太网网络等)、网络具体能力等网络信息。

  5. 调用getConnectionProperties方法,获取NetHandle对应网络的连接信息。

import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';// 构造单例对象
export class GlobalContext {public netList: connection.NetHandle[] = [];public netHandle: connection.NetHandle|null = null;private constructor() {}private static instance: GlobalContext;private _objects = new Map<string, Object>();public static getContext(): GlobalContext {if (!GlobalContext.instance) {GlobalContext.instance = new GlobalContext();}return GlobalContext.instance;}getObject(value: string): Object | undefined {return this._objects.get(value);}setObject(key: string, objectClass: Object): void {this._objects.set(key, objectClass);}
}// 调用getDefaultNet方法,获取默认的数据网络(NetHandle)
connection.getDefaultNet().then((data:connection.NetHandle) => {if (data.netId == 0) {// 当前无默认网络时,获取的netHandler的netid为0,属于异常情况,需要额外处理return;}if (data) {console.info("getDefaultNet get data: " + JSON.stringify(data));GlobalContext.getContext().netHandle = data;// 获取netHandle对应网络的能力信息。能力信息包含了网络类型、网络具体能力等网络信息connection.getNetCapabilities(GlobalContext.getContext().netHandle).then((data: connection.NetCapabilities) => {console.info("getNetCapabilities get data: " + JSON.stringify(data));// 获取网络类型(bearerTypes)let bearerTypes: Set<number> = new Set(data.bearerTypes);let bearerTypesNum = Array.from(bearerTypes.values());for (let item of bearerTypesNum) {if (item == 0) {// 蜂窝网console.log(JSON.stringify("BEARER_CELLULAR"));} else if (item == 1) {// Wi-Fi网络console.log(JSON.stringify("BEARER_WIFI"));} else if (item == 3) {// 以太网网络console.log(JSON.stringify("BEARER_ETHERNET"));}}// 获取网络具体能力(networkCap)let itemNumber : Set<number> = new Set(data.networkCap);let dataNumber = Array.from(itemNumber.values());for (let item of dataNumber) {if (item == 0) {// 表示网络可以访问运营商的MMSC(Multimedia Message Service,多媒体短信服务)发送和接收彩信console.log(JSON.stringify("NET_CAPABILITY_MMS"));} else if (item == 11) {// 表示网络流量未被计费console.log(JSON.stringify("NET_CAPABILITY_NOT_METERED"));} else if (item == 12) {// 表示该网络应具有访问Internet的能力,该能力由网络提供者设置console.log(JSON.stringify("NET_CAPABILITY_INTERNET"));} else if (item == 15) {// 表示网络不使用VPN(Virtual Private Network,虚拟专用网络)console.log(JSON.stringify("NET_CAPABILITY_NOT_VPN"));} else if (item == 16) {// 表示该网络访问Internet的能力被网络管理成功验证,该能力由网络管理模块设置console.log(JSON.stringify("NET_CAPABILITY_VALIDATED"));}}})}
})// 获取netHandle对应网络的连接信息。连接信息包含了链路信息、路由信息等
connection.getConnectionProperties(GlobalContext.getContext().netHandle).then((data: connection.ConnectionProperties) => {console.info("getConnectionProperties get data: " + JSON.stringify(data));
})// 调用getAllNets,获取所有处于连接状态的网络列表(Array<NetHandle>)
connection.getAllNets().then((data: connection.NetHandle[]) => {console.info("getAllNets get data: " + JSON.stringify(data));if (data) {GlobalContext.getContext().netList = data;let itemNumber : Set<connection.NetHandle> = new Set(GlobalContext.getContext().netList);let dataNumber = Array.from(itemNumber.values());for (let item of dataNumber) {// 循环获取网络列表每个netHandle对应网络的能力信息connection.getNetCapabilities(item).then((data: connection.NetCapabilities) => {console.info("getNetCapabilities get data: " + JSON.stringify(data));})// 循环获取网络列表每个netHandle对应的网络的连接信息connection.getConnectionProperties(item).then((data: connection.ConnectionProperties) => {console.info("getConnectionProperties get data: " + JSON.stringify(data));})}}
})

使用对应网络解析域名,获取所有IP

  1. 声明接口调用所需要的权限:ohos.permission.INTERNET

    此权限级别为normal,在申请权限前,请保证符合[权限使用的基本原则]

  2. 从@kit.NetworkKit中导入connection命名空间。

  3. 调用getAddressesByName方法,使用默认网络解析主机名以获取所有IP地址。

// 引入包名
import { connection } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';// 使用默认网络解析主机名以获取所有IP地址
connection.getAddressesByName("xxxx").then((data: connection.NetAddress[]) => {console.info("Succeeded to get data: " + JSON.stringify(data));
});

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

在这里插入图片描述

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 《鸿蒙 (OpenHarmony)开发学习视频》
  • 《鸿蒙生态应用开发V2.0白皮书》
  • 《鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 《鸿蒙开发基础》
  • 《鸿蒙开发进阶》
  • 《鸿蒙开发实战》

在这里插入图片描述

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿
1

相关文章:

鸿蒙开发(NEXT/API 12)【网络连接管理】 网络篇

简介 网络连接管理提供管理网络一些基础能力&#xff0c;包括WiFi/蜂窝/Ethernet等多网络连接优先级管理、网络质量评估、订阅默认/指定网络连接状态变化、查询网络连接信息、DNS解析等功能。 说明 为了保证应用的运行效率&#xff0c;大部分API调用都是异步的&#xff0c;对…...

VMware Fusion虚拟机Mac版 安装Ubuntu操作系统教程

Mac分享吧 文章目录 下载镜像地址&#xff1a;[www.macfxb.cn](http://www.macfxb.cn)一、CentOS安装完成&#xff0c;软件打开效果二、Mac中安装Ubuntu虚拟机1️⃣&#xff1a;下载镜像2️⃣&#xff1a;创建虚拟机3️⃣&#xff1a;虚拟机设置4️⃣&#xff1a;虚拟机安装5️…...

基于SpringBoot+Vue+MySQL的房屋租赁管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的…...

虚拟机器配置固定IP地址

新安装的虚拟机&#xff0c;如何配置固定的ip地址&#xff0c;废话少说直接上干货 第一步&#xff1a;在VMarea中 选中你要固定IP的虚拟机器&#xff0c;点击上面的“编辑”按钮&#xff0c;然后找到“虚拟网络编辑器”&#xff0c;选中你要修改的ip VMnet8&#xff0c;然后是…...

用python实现基于形态学的方法,如开运算和闭运算,来去除pcd格式激光点云中的植被

在Python中&#xff0c;你可以使用open3d库来读取和处理pcd格式的点云数据。下面是一个示例代码&#xff0c;展示如何使用形态学操作来去除植被。 首先&#xff0c;确保你已经安装了open3d库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install open3d接下来&…...

QT 绘制简易时钟

原文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->startTimer(1000); }Widget::~Widget() {delete ui; }//时钟底座 void Widget::paintEvent(Q…...

为控制器的方法添加必要参数

前言&#xff1a;做这个系统时&#xff0c;要求每次调用接口时要传操作人、操作人电脑ip、菜单id&#xff0c;然后计入log。本来前端读取到然后加入请求头&#xff0c;后端写入log即可。但是老大要求后端也要把控必传参数&#xff0c;避免前端忘记。所以就写了这个。IOperation…...

(计算机网络)应用层

1.为什么需要应用层 应用层提供使用tcp&#xff0c;udp使用的方式 协议就是制定的规则 2.域名服务器概述 域名是唯一的 新增域名&#xff0c;大家都要修改这个文本文件&#xff0c;所以要进行集中管理这个文本文件&#xff0c;而不是使用本地的hosts文件 hosts文件在Windows系统…...

使用3DUNet训练自己的数据集(pytorch)— 医疗影像分割

代码:lee-zq/3DUNet-Pytorch: 3DUNet implemented with pytorch (github.com) 文章<cicek16miccai.pdf (uni-freiburg.de)3D U-Net: Learning Dense Volumetric Segmentation...

【python】—— Python爬虫实战:爬取珠海市2011-2023年天气数据并保存为CSV文件

目录 目标 准备工作 爬取数据的开始时间和结束时间 爬取数据并解析 将数据转换为DataFrame并保存为CSV文件 本文将介绍如何使用Python编写一个简单的爬虫程序,以爬取珠海市2011年至2023年的天气数据,并将这些数据保存为CSV文件。我们将涉及到以下知识点: 使用r…...

U盘文件及文件夹带锁修复

磁盘管理修复工具Disks磁盘管理–针对U盘文件及文件夹带锁修复 本文章只针对统信系统 文章目录 功能概述一、安装工具二、数据备份三、检查文件系统1. 通过启动栏中的“磁盘”或者桌面的“磁盘”启动文件来启动应用:2. 选择U盘设备3. 点击“检查文件系统”按钮(如果无此按钮…...

AnyChart 数据可视化框架

AnyChart 数据可视化框架 AnyChart 是一个灵活的 JavaScript&#xff08;HTML5、SVG、VML&#xff09;图表框架&#xff0c;适合任何需要数据可视化的解决方案。 目录 下载并安装开始插件将 AnyChart 与 TypeScript 结合使用将 AnyChart 与 ECMAScript 6 结合使用技术集成贡献…...

ARM base instruction -- br

BR Branch to Register branches unconditionally to an address in a register, with a hint that this is not a subroutine return. 无条件地分支到寄存器中的一个地址&#xff0c;并提示这不是子例程返回。 BR <Xn> BR 跳转到reg内容地址&#xff0c;不会将返回地址…...

编译原理/软件工程核心概念-问题理解

目录 1.程序的编译执行过程 2.指针和引用的区别 3.堆和栈的区别 4.最熟悉的编程语言- Python&#xff1a;介绍PyTorch和TensorFlow框架 5.C与C的区别 6.软件工程是什么&#xff1f; 7.简述瀑布模型 8.敏捷开发方法是什么&#xff1f;它与瀑布模型相比有哪些优势和劣势 1…...

学习pyqt5相关知识回顾

1. 模块 1.1 import导入 1) 模块:是一系列功能的集合体,模块名.功能名,就可以使用模块的功能 2) 首次导入模块,就会立即执行模块里面的内容 3) 当前名称空间会产生一个名字module,指向module.py产生的名称空间.我们可以使用module.name/函数名,来调用module.py里面的内容. …...

OPENAIGC开发者大赛高校组银奖 | LonAC中小学编程学习平台

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给您…...

oneclick 命令:快速筛选控制变量的利器

目录 1. 命令语法2. 结果输出3. 使用示例4. 总结 在进行回归分析时&#xff0c;选择合适的控制变量对于确保模型的稳健性至关重要。然而&#xff0c;手动筛选变量组合不仅费时费力&#xff0c;还容易出错。为此&#xff0c;Stata 中的 oneclick 命令提供了一个高效的解决方案&a…...

Kotlin 代替Java接口回调,就这么简单

假如你使用旧的接口回调&#xff1a; 通常三步&#xff1a;1 定义接口和方法&#xff1b;2 使用接口中方法&#xff1b;3 继承接口并实现方法&#xff1b; 例&#xff1a; class XXXAdapter{public var mClickCollBack: clickCollBack? null //1定义interface clickColl…...

Codeforces Round 971 (Div. 4)——C题题解

本题的大意是一个青蛙从原点开始跳格子(0,0)&#xff0c;最终要跳到点(x,y)去&#xff0c;并且每一步的步长不能超过k&#xff0c;问最短几步可以跳到终点 分析&#xff1a; 本题利用贪心思想&#xff0c;肯定是先跳最大的步长这样总体用的步数最长 代码演示&#xff1a; #inc…...

【论文阅读笔记】Tackling the Generative Learning Trilemma with Denoising Diffusion GANs

【论文阅读笔记】Tackling the Generative Learning Trilemma with Denoising Diffusion GANs Introduction方法 使用传统GANS建模去噪分布理解模式覆盖率 Paper&#xff1a;https://arxiv.org/abs/2112.07804 Code&#xff1a;https://github.com/NVlabs/denoising-diffusion-…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...