【HarmonyOS NEXT】FAQ之系统开发(网络4)

1、如何实现下载断点续传

A:断点续传的实现需要依赖于服务器,客户端仅支持通过设置下载的开始位置和结束位置来控制是否断点续传。开发者可以通过@ohos.request模块来实现上传下载功能,设置下载任务的配置信息request.agent.Config中的begins和ends参数

2、能否通过httpResponse的result拿到一个加密内容的数据

A:使用http请求传递加密数据能够在result中获取到结果。

3、使用SocketServer时,如何解决较高概率接收不到 client.on("message", (value: SocketInfo) 中的回调问题

A:定义一个数组,在有客户端连接上来的时候,将客户端的socket加入数组中,避免被回收释放从而导致无法接收数据。

4、如何判断使用的是移动蜂窝网络

A:可以使用@kit.NetworkKit中的connection.getNetCapabilities接口来获取对应的网络能力信息。在结果中通过判断是否具有NET_CAPABILITY_NOT_METERED属性,如果具有NET_CAPABILITY_NOT_METERED,说明是普通Wi-Fi,否则是移动蜂窝网络。需要权限:ohos.permission.GET_NETWORK_INFO。

5、如何监听网络变化

A:在网络连接管理模块中通过on('netCapabilitiesChange')订阅网络能力变化事件,即可监听网络变化。

6、如何实现http长连接

A:http模块发送可支持使用长连接,参考代码如下:

import { http } from '@kit.NetworkKit'; 
import { BusinessError } from '@kit.BasicServicesKit'; 
 
let httpRequest = http.createHttp(); 
httpRequest.requestInStream("EXAMPLE_URL", (err: BusinessError, data: number) => { 
  if (!err) { 
    console.info("requestInStream OK! ResponseCode is " + JSON.stringify(data)); 
  } else { 
    console.error("requestInStream ERROR : err = " + JSON.stringify(err)); 
  } 
})

7、如何实现http并行下载

A:使用上传下载模块进行下载即可。目前最多支持4个任务同时下载。

参考代码如下:

import { request } from '@kit.BasicServicesKit'; 
import { BusinessError } from '@kit.BasicServicesKit'; 
 
let downloadTask: request.DownloadTask; 
try { 
  request.downloadFile(getContext(), { url: 'https://xxxx/xxxx.hap' }).then((data: request.DownloadTask) => { 
    downloadTask = data; 
  }).catch((err: BusinessError) => { 
    console.error(`Failed to request the download. Code: ${err.code}, message: ${err.message}`); 
  }) 
} catch (err) { 
  console.error(`Failed to request the download. err: ${JSON.stringify(err)}`); 
}

8、udp协议是否有提供框架

A:socket连接模块支持使用udp协议进行通信,可参考文档:Socket连接

9、udp服务信号是如何发送和接收

A:如下步骤

  1. import需要的socket模块。

  2. 创建一个UDPSocket连接,返回一个UDPSocket对象。

  3. 绑定IP地址和端口,端口可以指定或由系统随机分配。

  4. 连接到指定的IP地址和端口。

  5. 发送数据。

  6. socket连接使用完毕后,主动关闭。

10、request和requestInStream的使用边界问题

A:request和requestInStream使用区别在于:request接口有5M的数据,如果响应大于5M用requestinstream。

11、是否有无网判断接口

A:有,调用connection.hasDefaultNet,检查默认数据网络是否被激活,默认数据网络被激活返回true。如果有默认数据网路,可以使用getDefaultNet去获取。示例代码如下:

import { connection } from '@kit.NetworkKit'; 
 
connection.hasDefaultNet().then((data: boolean) => { 
  console.log('data: ' + data); 
});

12、如何获取网络类型:Wi-Fi,3G,4G,5G等

A:先通过getNetCapabilities去获取网络的类型,判断默认网络是WIFI还是蜂窝。

如果是Wi-Fi,则直接确认网络类型是Wi-Fi。如果是在蜂窝连接情况下,可以调用radio.getSignalInformation获取指定SIM卡槽对应的注册网络信号强度信息列表,返回SignalInformation对象的数组,其中,返回的signalType代表网络类型NetworkType,signalType的值对应网络类型如下:

  • GSM:2G

  • CDMA:电信2G

  • WCDMA:3G

  • TDSCDMA:3G

  • LTE:4G

  • NR:5G

13、Socket下的TLSConnectOptions不配置是否会使用手机上的默认证书

A:使用TLSSocket请求需要手动通过代码配置,不会使用手机上的默认证书。TLSConnectOptions部分配置证书需要使用与请求地址相匹配的证书内容,可将证书放至rawfile文件下通过getRawFileContent()方法读取转换为string类型数据放入。后续将会支持系统已安装的CA证书。

14、在使用Socket连接相关接口时,NetAddress的address参数只能是IP地址,如果只有host的情况如何处理

A:可通过使用getAddressByName接口解析主机名以获取IP地址。

更多详情查看:文档中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值