HarmonyOS 鸿蒙Next网络编程系列42-仓颉版域名解析示例
HarmonyOS 鸿蒙Next网络编程系列42-仓颉版域名解析示例
1. 域名解析简介
域名解析是网络开发中经常使用的功能之一,特别是对于当前版本的鸿蒙API,使用TCP或者UDP等网络协议通讯时,只能使用确定的IP地址进行绑定或者发送消息,还不支持直接使用域名,所以,通过域名解析得到对应的IP地址,然后再使用套接字进行通讯,可以避免使用者记录IP地址的困难。
在本系列的第15篇文章《鸿蒙网络编程系列15-域名解析示例》中,我们基于ArkTS语言在API 9的环境下演示了对网站域名进行解析的过程,本文将使用仓颉语言在API 12的环境中实现类似的功能。
鸿蒙封装的网络管理包,使用如下的方式导入:
import ohos.net.connection.*
connection包和域名解析相关的函数主要是如下三个:
//获取默认激活的数据网络。
1. public func getDefaultNet(): NetHandle
//NetHandle类的函数,使用对应网络解析主机名以获取所有IP地址。
2. public func getAddressesByName(host: String): Array<NetAddress>
//NetHandle类的函数,使用对应网络解析主机名以获取第一个IP地址。
3. public func getAddressByName(host: String): NetAddress
一个域名可能对应多个IP地址,如果只是获取域名对应的IP地址,可以使用getAddressByName函数,如果需要获取域名对应的所有IP地址,需要使用getAddressesByName函数,本文要演示解析域名的所有IP地址,所以使用的是getAddressByName。
2. 域名解析演示
本示例运行后的界面如图所示:
输入待解析的域名,然后单击“解析”按钮,即可进行解析,这里使用了百度和华为开发者社区的域名,解析结果如图所示:
可以看到,解析出了所有对应的IP地址。
3. 域名解析示例编写
下面详细介绍创建该示例的步骤(确保DevEco Studio已安装仓颉插件)。
步骤1:创建[Cangjie]Empty Ability项目。
步骤2:在module.json5配置文件加上对权限的声明:
"requestPermissions": [
{
"name": "ohos.permission.INTERNET"
},
{
"name": "ohos.permission.GET_NETWORK_INFO"
}
]
这里添加了获取网络信息和访问互联网的权限。
步骤3:在build-profile.json5配置文件加上仓颉编译架构:
"cangjieOptions": {
"path": "./src/main/cangjie/cjpm.toml",
"abiFilters": ["arm64-v8a", "x86_64"]
}
步骤4:在index.cj文件里添加如下的代码:
package ohos_app_cangjie_entry
import ohos.base.*
import ohos.component.*
import ohos.state_manage.*
import ohos.state_macro_manage.*
import std.collection.HashMap
import ohos.net.http.*
import ohos.net.connection.*
import std.collection.ArrayList
@Entry
@Component
class EntryView {
//标题
@State
var title: String = "仓颉版域名解析示例"
//连接、通讯历史记录
@State
var msgHistory: String = ''
//登录地址
@State
var hostName: String = "www.baidu.com"
let scroller: Scroller = Scroller()
func build() {
Row {
Column {
Text(title).fontSize(14).fontWeight(FontWeight.Bold).width(100.percent).textAlign(
TextAlign.Center).padding(10)
Flex(FlexParams(justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center)) {
Text("待解析域名:").fontSize(14)
TextInput(text: hostName).onChange({
value => hostName = value
}).width(100).fontSize(11).flexGrow(1)
Button("解析").onClick {
evt => resolveHost()
}.width(70).fontSize(14).flexGrow(0)
}.width(100.percent).padding(10)
Scroll(scroller) {
Text(msgHistory).textAlign(TextAlign.Start).padding(10).width(100.percent).backgroundColor(0xeeeeee)
}.align(Alignment.Top).backgroundColor(0xeeeeee).height(300).flexGrow(1).scrollable(
ScrollDirection.Vertical).scrollBar(BarState.On).scrollBarWidth(20)
}.width(100.percent).height(100.percent)
}.height(100.percent)
}
//解析域名对应的IP地址
func resolveHost() {
//获取默认的激活网络
let netHandle = getDefaultNet();
var addrList = ArrayList<String>()
//遍历解析后得到的每一个网络地址并去重
for (netaddr in netHandle.getAddressesByName(this.hostName)) {
if (!addrList.contains(netaddr.address)) {
addrList.append(netaddr.address)
}
}
this.msgHistory += "解析域名[${this.hostName}]的结果:\r\n"
//输出去重后的IP地址
for (addr in addrList) {
this.msgHistory += "${addr}\r\n"
}
}
}
步骤5:编译运行,可以使用模拟器或者真机。
步骤6:按照本文第2部分“域名解析演示”操作即可。
4. 代码分析
在域名解析的时候,使用getAddressesByName函数返回的多个IP地址有可能包括重复的地址,所以在使用的时候要注意去重,本示例是通过如下的方式实现去重的:
var addrList = ArrayList<String>()
//遍历解析后得到的每一个网络地址并去重
for (netaddr in netHandle.getAddressesByName(this.hostName)) {
if (!addrList.contains(netaddr.address)) {
addrList.append(netaddr.address)
}
}
(本文作者原创,除非明确授权禁止转载)
本文源码地址: https://gitee.com/zl3624/harmonyos_network_samples/tree/master/code/others/DnsResolve4Cj
本系列源码地址: https://gitee.com/zl3624/harmonyos_network_samples
更多关于HarmonyOS 鸿蒙Next网络编程系列42-仓颉版域名解析示例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next网络编程系列42-仓颉版域名解析示例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对帖子标题“HarmonyOS 鸿蒙Next网络编程系列42-仓颉版域名解析示例”的问题,以下是专业且简洁的回答:
在HarmonyOS鸿蒙Next网络编程系列中,仓颉版域名解析示例主要展示了如何在鸿蒙系统环境下,利用仓颉(一种鸿蒙特有的编程框架或工具集,假设为示例中的关键组件)进行域名解析的操作。
鸿蒙系统的网络编程框架可能提供了特定的API或方法来实现域名解析功能。在仓颉版中,这些API或方法可能被封装得更加友好,便于开发者使用。示例代码通常会展示如何初始化网络模块、设置域名解析参数、发起域名解析请求,并处理解析结果。
域名解析过程通常涉及DNS查询,将人类可读的域名转换为机器可读的IP地址。在鸿蒙系统中,这一过程可能会受到系统级网络配置、安全策略等因素的影响。
如果你在实现仓颉版域名解析示例时遇到问题,建议检查以下几点:
- 确保鸿蒙系统环境配置正确。
- 确认仓颉框架及相关依赖已正确安装。
- 仔细阅读官方文档,了解域名解析API的正确使用方法。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,