几种常用大模型工具生成基于hi3861的OpenHarmony代码的尝试

引言

最近在上智能物联网的课程,讲授基于hi3861的OpenHarmony编程,所以尝试一下使用大模型工具生成相关的代码,看看效果如何。提问的方式比较简单粗暴:

在OpenHarmony的hi3861平台上,如何编程访问https的网站?

Kimi

Kimi是我用得最多的平台,它经过文献搜索之后给出如下答案。

e12fe77f12a4454d898e6f4dd5a27d90.png

 

在OpenHarmony的hi3861平台上访问https的网站,通常需要以下几个步骤:

  1. Wi-Fi连接:首先,确保hi3861开发板已经连接到互联网。这通常涉及到扫描可用的Wi-Fi网络,然后连接到一个具体的网络。可以通过以下API实现:

    c

    wifi_scan(NULL); // 扫描周边可用的Wi-Fi网络
    wifi_connect(ssid, key); // 连接到指定的Wi-Fi网络

    其中ssid是网络名称,key是网络密钥。连接成功后,可以通过wifi_set静态ip设置静态IP地址,以保证设备的网络连接稳定性。

  2. 配置网络参数:在进行网络编程之前,需要根据你的无线路由、Linux系统IP修改net_params.h文件的相关代码,包括热点名称、热点密码、服务器IP地址和端口号等。

  3. 使用LwIP Socket API编程:OpenHarmony的hi3861平台支持LwIP协议栈,可以使用LwIP的Socket API进行网络编程。例如,创建一个UDP客户端进行网络通信的步骤如下:

    • 创建Socket:socket()
    • 设置目标服务器地址和端口:sockaddr_in
    • 发送和接收数据:sendto() recvfrom()
    • 关闭Socket:close()

    具体的代码实现可以参考提供的示例。

  4. 访问HTTPS网站:对于HTTPS的支持,通常需要一个SSL/TLS库来处理加密和证书验证。在嵌入式设备上,这通常意味着使用一个轻量级的SSL库,如wolfSSL、mbedTLS等。你需要集成这样的库到你的OpenHarmony项目中,并使用它来创建一个安全的连接。

  5. 调试和验证:在开发过程中,可以通过printf打印日志或者通过asm文件定位panic问题来进行调试验证。

请注意,由于hi3861是一个轻量级的IoT设备,它的资源有限,因此可能需要对SSL/TLS库进行适当的配置以适应其资源限制。同时,确保你的OpenHarmony版本支持你选择的SSL/TLS库。由于搜索结果中没有直接提供如何在OpenHarmony上实现HTTPS的具体代码,你可能需要参考官方文档或者社区论坛来获取更多信息。

Kimi的大思路是对的,但是没有给出具体的代码,主要的原因大概是网络上找不到现成的例子。 

文心一言

同样的问题甩给文心一言后,它也很快地给出了答案。

a5c16141125d45838bb10683d46c2f8f.png

在OpenHarmony的hi3861平台上访问HTTPS网站,你通常需要用到一些网络通信库来处理HTTP请求和SSL/TLS加密。由于OpenHarmony是一个轻量级的操作系统,很多标准的库可能需要进行适配或者移植。以下是一个基本的步骤指南,用于在OpenHarmony的hi3861平台上编程访问HTTPS网站。

1. 准备工作

  1. 开发环境:确保你已经设置好OpenHarmony的开发环境,包括必要的SDK和工具链。
  2. 了解hi3861平台:熟悉hi3861的硬件规格和OpenHarmony在该平台上的支持情况。

2. 选择和移植库

OpenHarmony可能没有直接提供完整的HTTP和SSL/TLS库,因此你可能需要选择并移植这些库。

可能的库选择

  • libcurl:一个支持多种协议的客户端URL传输库,包括HTTPS。
  • mbedTLS:一个轻量级的SSL/TLS库,适合嵌入式系统。
  • OpenSSL:一个功能强大的SSL/TLS库,但可能较为庞大。

移植步骤

  1. 下载源码:从库的官方网站下载源码。
  2. 配置编译:根据hi3861的编译环境,配置库的编译选项。
  3. 编译库:使用OpenHarmony的编译工具链编译库文件。
  4. 集成库:将编译好的库文件集成到你的OpenHarmony项目中。

3. 编写代码

以下是一个使用libcurl访问HTTPS网站的示例代码:

 

c复制代码

 #include <stdio.h>
 #include <stdlib.h>
 #include <curl/curl.h>
  
 // 回调函数,用于处理从服务器接收到的数据
 size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
 {
 ((char *)userp)[0] = '\0';
 strncat((char *)userp, (char *)contents, size * nmemb);
 return size * nmemb;
 }
  
 int main(void)
 {
 CURL *curl;
 CURLcode res;
 char readBuffer[1024 * 1024]; // 缓冲区,用于存储从服务器接收到的数据
  
 // 初始化libcurl
 curl_global_init(CURL_GLOBAL_DEFAULT);
 curl = curl_easy_init();
 if(curl) {
 // 设置URL
 curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com");
  
 // 设置回调函数
 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
  
 // 设置回调函数的数据参数
 curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)readBuffer);
  
 // 执行请求
 res = curl_easy_perform(curl);
  
 // 检查请求是否成功
 if(res != CURLE_OK)
 fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
 else
 printf("Response: %s\n", readBuffer);
  
 // 清理
 curl_easy_cleanup(curl);
 }
 curl_global_cleanup();
  
 return 0;
 }

4. 编译和运行

  1. 修改CMakeLists.txt:将你的代码和依赖的库添加到CMakeLists.txt中。
  2. 编译项目:使用OpenHarmony的编译工具链编译你的项目。
  3. 烧录和运行:将编译好的固件烧录到hi3861开发板上,并运行程序。

5. 调试和测试

  • 查看日志:使用OpenHarmony提供的日志工具查看程序的输出和调试信息。
  • 测试不同URL:尝试访问不同的HTTPS网站,确保程序能够正确处理各种情况。

注意事项

  • 内存限制:hi3861是一个资源有限的嵌入式平台,注意控制内存使用。
  • 安全性:确保你使用的SSL/TLS库是安全的,并经常更新以修复可能的安全漏洞。
  • 兼容性:测试你的程序在不同版本的OpenHarmony和hi3861硬件上的兼容性。

通过以上步骤,你应该能够在OpenHarmony的hi3861平台上编程访问HTTPS网站。如果遇到具体问题,可以查阅相关库的文档和OpenHarmony的开发者指南。

 

文心一言给的大方向也还是可以,但是这里面有些问题。一个是libcurl是不是可以在hi3861上运行,这个不确定,另一个是它没有考虑到OpenHarmony所使用的编译系统并不是CMake。所以它给的解答可能在Linux上没有问题,但是在hi3861上不一定能用。

星火飞码

星火飞码(iFlyCode)是讯飞星火提供的VSCode插件,它是针对编程设计的,所以我也向它提了同样的问题。

64d9ff34a0c543dea1a40a52fcc87086.png 

OpenHarmony是由华为开发的开源物联网操作系统,它支持多种芯片和硬件平台。在hi3861平台上访问HTTPS网站需要使用相关的网络库和任务处理机制。下面我将为您生成一个示例代码框架,演示如何在OpenHarmony上实现这一功能:

首先,您需要在系统中包含必要的网络库,并初始化相关配置。然后,创建一个任务来执行HTTPS请求,并处理响应数据。

 

新建插入复制比较

#include <ohos/network/netmgr.h>
#include <ohos/network/https.h>
using namespace OHOS;
class MyHttpsTask : public ::OHOS::AAFwk::Ability
{
public: MyHttpsTask() = default; ~MyHttpsTask() override = default; void OnStart(const Want &want) override { NetmgrStub::GetInstance().Connect(want);
}
void OnConnect() override { // 初始化网络配置 s_netMgr.SetMaxRecommendConnectionCount(5); s_netMgr.SetKeepAliveTime(30); s_netMgr.SetGlobalProxy(nullptr); // 创建并执行HTTPS请求 std::shared_ptr<HttpsConnection> connection = HttpsConnection::Create(/*URL*/ "https://www.example.com", this); if (connection != nullptr) { connection->SendRequest(Want{}); } } void OnResponse(const HttpsResponse &response) override { // 处理HTTPS响应 if (response.GetErrorCode() == ERR_OK) { std::string responseText = response.ReadAll(); // 处理响应文本 } else { // 错误处理 } } private: static NetManager s_netMgr; }; NetManager MyHttpsTask::s_netMgr;

在这个示例中,我们通过HttpsConnection类来实现对HTTPS网站的访问,并实现了OnResponse方法来处理服务器返回的响应数据。请注意,您需要根据实际需求修改URL和其他相关参数。

它的回答显然不是针对hi3861的,没法用。

结语

从目前看,针对像hi3861这样比较小众的平台,大模型工具的表现不是太好。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/447240.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进程和线程

目录 进程 线程 进程和线程的区别 进程 什么是进程&#xff1f; 每个应用程序运行在操作系统上时&#xff0c; 操作系统会提供一种抽象&#xff0c;好像系统上只有这个程序在运行&#xff0c;所有的硬件资源都被这个程序在使用。 这种假象是通过抽象了一个进程的概念来完成…

什么是编译器?

我们平时所说的程序&#xff0c;是指双击后就可以直接运行的程序&#xff0c;这样的程序被称为可执行程序&#xff08;Executable Program&#xff09;。在 Windows 下&#xff0c;可执行程序的后缀有 .exe 和 .com&#xff08;其中 .exe 比较常见&#xff09;&#xff1b;在类…

决战Linux操作系统

前言&#xff1a; 你是否也曾经为Linux所困扰过&#xff0c;在网上找的资料零零散散&#xff0c;是否学完Linux后还是懵懵懂懂&#xff0c;别怕&#xff0c;这篇博客是博主精心为你准备的&#xff0c;现在&#xff0c;就让我们一起来走进Linux的世界&#xff0c;决战Linux&…

C语言 sizeof 的介绍,以及sizeof计算数组名、 数组首地址、数组的元素之间的区别

一、sizeof 介绍 sizeof 是 C 语言中的一个运算符&#xff0c;用于计算数据类型或变量在内存中占用的字节数。用于计算数据类型或变量所占的内存大小&#xff0c;以字节为单位。它可以在编译时计算其操作数的大小&#xff0c;并返回一个 size_t 类型的值。它可以帮助了解不同类…

WebGL 小白入门学习

1. WebGL是什么&#xff1f; WebGL&#xff08;Web Graphics Library&#xff09;是一种JavaScript API&#xff0c;它允许你在不需要安装任何额外插件的情况下&#xff0c;直接在浏览器中渲染高性能的2D和3D图形。WebGL利用了用户的图形处理单元&#xff08;GPU&#xff09;来…

统信桌面专业版【手动分区安装UOS系统】介绍

统信桌面专业版【手动分区安装UOS系统】介绍 全文导读功能概述准备环境安装步骤注意事项 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 全文导读 本文旨在详细介绍在安装UOS系统时采用手动分区的方法。虽然全盘安装通常是推荐的安装方式&…

实战篇:(四)Vue2 + Three.js 创建可交互的360度全景视图,可控制旋转、缩放完整代码

Vue2 Three.js 创建可交互的360度全景视图&#xff0c;可控制旋转、缩放 引言 在现代网页开发中&#xff0c;三维图形技术已经成为提升用户体验的重要工具。本文将展示如何使用 Three.js 创建一个简单的可交互360度全景视图。通过这一项目&#xff0c;你将能够学习到基本的场…

hadoop集群搭建-安装虚拟机

2.1 安装虚拟机 在本地搭建集群就需要这么几个事 装虚拟机 安装环境 配置集群 启动 这篇博客主要就是讲的装虚拟机这一个环节的 装虚拟机就是和组装一台现实中的电脑一样&#xff0c;首先来说就是要有硬件&#xff0c;就是组装硬件&#xff0c;然后就是装系统&#xff…

Kind部署的K8s证书过期后的解决方案

证书通常有效期为1年&#xff0c;一年后服务将不可用解决方案就是更新证书 1. 找到 Kind 集群的控制平面容器名称,容器名称不一定是这个 docker ps --filter "namekind-control-plane"2. 进入 Kind 控制平面的容器&#xff1a; docker exec -it kind-control-plane…

javascript object

用const去define一个constant 用let (如果要reassign的话) 一个变量。

Redis-缓存一致性

缓存双写一致性 更新策略探讨 面试题 缓存设计要求 缓存分类&#xff1a; 只读缓存&#xff1a;&#xff08;脚本批量写入&#xff0c;canal 等&#xff09;读写缓存 同步直写&#xff1a;vip数据等即时数据异步缓写&#xff1a;允许延时&#xff08;仓库&#xff0c;物流&a…

解锁C++继承的奥秘:从基础到精妙实践(下)

文章目录 前言&#x1f950;五、多继承&#xff0c;菱形继承和菱形虚拟继承&#x1f9c0;5.1 多继承&#x1f9c0;5.2 菱形继承&#x1f9c0;5.3 虚拟继承&#xff08;解决菱形继承问题&#xff09;5.3.1 虚拟继承的语法&#xff1a;5.3.2 虚拟继承示例&#xff1a; &#x1f9…

springboot 整合 快手 移动应用 授权 发布视频 小黄车

前言&#xff1a; 因快手文档混乱&#xff0c;官方社区技术交流仍有很多未解之谜&#xff0c;下面3种文档的定义先区分。 代码中的JSON相关工具均用hutool工具包 1.快手 移动双端 原生SDK 文档https://mp.kuaishou.com/platformDocs/develop/mobile-app/ios.html 2.快手 Api 开…

Elasticsearch设置 X-Pack认证,设置账号和密码

前言 以下Elasticsearch版本&#xff1a;7.9.3 ES自带的X-Pack密码验证&#xff1a; X-Pack是elasticsearch的一个扩展包&#xff0c;将安全&#xff0c;警告&#xff0c;监视&#xff0c;图形和报告功能捆绑在一个易于安装的软件包中&#xff0c;所以我们想要开启账号密码验证…

网优学习干货:王者荣耀游戏用户体验洞察及质差识别(1)

一、课题背景 二、课题目的 针对热点游戏&#xff08;王者荣耀&#xff09;进行业务质量评估&#xff0c;并通过对端到端定界分析&#xff0c;从无线、核心网、互联网维度识别影响用户体验关键因素&#xff0c;为游戏用户的体验优化提供依据。 三、课题实施进度 王者荣耀卡顿特…

linux------缓冲区与C库的原理

前言 一、缓冲区 缓冲区的作用是提高效率&#xff0c;因为将数据写入到设备&#xff0c;是需要调用系统接口的&#xff0c;如果每次写入缓冲区的数据就调用一次系统调用&#xff0c;涉及到系统调用这时操作系统就会介入&#xff0c;用户态转为内核态&#xff0c;这个过程需要时…

linux 搭建sentinel

1.下载 linux执行下面的命令下载包 wget https://github.com/alibaba/Sentinel/releases/download/1.8.6/sentinel-dashboard-1.8.6.jar2.启动 nohup java -Dserver.port9090 -Dcsp.sentinel.dashboard.serverlocalhost:9090 -Dproject.namesentinel-dashboard -jar sentin…

k8s中控制器的使用

一、replicaset控制器 ReplicaSet 是下一代的 Replication Controller&#xff0c;官方推荐使用ReplicaSet ReplicaSet和Replication Controller的唯一区别是选择器的支持&#xff0c;ReplicaSet支持新的基于集合的选择器需求 ReplicaSet 确保任何时间都有指定数量的 Pod 副…

Metasploit渗透测试之攻击终端设备和绕过安全软件

概述 在之前&#xff0c;重点讨论了针对服务器端的利用。但在当下&#xff0c;最成功的攻击都是针对终端的&#xff1b;原因是&#xff0c;随着大部分安全预算和关注都转向面向互联网的服务器和服务&#xff0c;越来越难找到可利用的服务&#xff0c;或者至少是那些还没有被破…

数据库设计与开发—初识SQLite与DbGate

一、SQLite与DbGate简介 &#xff08;一&#xff09;SQLite[1][3] SQLite 是一个部署最广泛、用 C 语言编写的数据库引擎&#xff0c;属于嵌入式数据库&#xff0c;其作为库被软件开发人员嵌入到应用程序中。 SQLite 的设计允许在不安装数据库管理系统或不需要数据库管理员的情…