Harmony OS 网络编程 实验指南,鸿蒙开发项目经历

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img

img
img
htt

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注鸿蒙)
img

正文

Linux上可以使用发行版的包管理器安装,例如Debian/Ubuntu上:

  • sudo apt-get install netcat

Windows上,MobaXterm工具上也可以用 apt-get install netcat 安装;

netcat 如何使用?

开始之前,先简单介绍一下 netcat 的几种用法:

  1. TCP服务端模式: netcat -l 5678 ,会启动一个TCP服务器,监听5678端口,你可以换成其他端口;
  2. TCP客户端模式: netcat localhost 5678, localhost是目标主机参数,可以换成其他你想要连接的主机(主机名、IP地址、域名都可以),5678是端口;
  • 你如果在同一台机器的两个终端中分别执行上述两条命令,它们两者之间就会建立连接一条TCP连接,此时你在其中一个终端上输入字符,敲回车就会发送到另一个终端中;
  1. UDP服务端模式: netcat -u -l 6789, 没错,只需要加一个-u参数,就可以启动一个UDP服务端;
  2. UDP客户端模式: netcat -u localhost 6789
  • 类似的,在同一台机器的两个终端中分别执行上述两条命令,他们两者之间也可以收发消息,只不过是UDP报文;

LwIP简介

LwIP是什么?

A Lightweight TCP/IP stack 一个轻量级的TCP/IP协议栈

LwIP在openharmony上的应用情况

目前,openharmony源码树有两份LwIP:

  1. third_party/lwip
  • 源码形式编译
  • 供liteos-a内核使用
  • 还有一部分代码在kernel/liteos_a中,一起编译
  1. vendor/hisi/hi3861/hi3861/third_party/lwip_sack
  • hi3861-sdk的一部分
  • 静态库形式编译
  • 不可修改配置
  • 可以查看当前配置(vend

下载源码

建议将本教程的源码下载到鸿蒙源码树的顶层目录,即和applicationsbuild等目录平级的地方:

  • 执行命令git clone https://gitee.com/hihopeorg/HarmonyOS-IoT-Application-Development.git

文件说明

文件:

文件名说明
BUILD.gn鸿蒙构建脚本,支持Hi3861、Hi3518、Hi3516开发板
demo_entry_cmsis.c鸿蒙liteos-m程序入口,支持Hi3861
demo_entry_posix.c鸿蒙liteos-a和Unix系统程序入口,Hi3516、Hi3518、PC
MakefileUnix系统构建脚本,支持Linux/Mac OS
net_common.h系统网络接口头文件
net_demo.hdemo脚手架头文件
net_params.h网络参数,包括WiFi热点信息,服务器IP、端口信息
tcp_client_test.cTCP客户端
tcp_server_test.cTCP服务端
udp_client_test.cUDP客户端
udp_server_test.cUDP服务端
wifi_connecter.c鸿蒙WiFi STA模式API的封装实现文件,比鸿蒙原始接口更容易使用
wifi_connecter.h鸿蒙WiFi STA模式API的封装头文件,比鸿蒙原始接口更容易使用

Linux主机实验指南

编译测试程序

使用如下命令进行编译:

  1. make 编译测试程序,该命令会生成4个可执行文件和几个.o文件
  2. make clean删除可执行程序和.o文件
运行测试程序

Linux系统可以在同一台机器上,使用多个终端进行测试;

  • TCP客户端测试:
  1. 在一个终端中使用netcat启动一个TCP服务端:netcat -l 5678
  2. 在另一个终端中启动TCP客户端测试程序:./tcp_client_test 5678 127.0.0.1 ;
  3. 在netcat终端中应该会出现TCP客户端测试程序发来的:Hello,输入World并回车,World将会发送到测试程序所在终端;
  • TCP服务端测试:
  1. 在一个终端中启动TCP服务端测试程序:./tcp_server_test 5678 ;
  2. 在另一个终端中使用netcat启动一个TCP客户端,并尝试连接测试程序:netcat 127.0.0.1 5678
  3. 在netcat终端中输入Hello并回车,终端应该会再输出一行Hello,后面一行是TCP服务端测试程序发送回来的,同时终端上会有相关打印;
  • UDP客户端测试:
  1. 在一个终端中使用netcat启动一个UDP服务端:netcat -u -l 5678
  2. 在另一个终端中启动UDP客户端测试程序:./udp_client_test 5678 127.0.0.1 ;
  3. 在netcat终端中应该会出现UDP客户端测试程序发来的Hello.,输入World并回车,World将会发送到测试程序所在终端;
  • UDP服务端测试:
  1. 在一个终端中启动UDP服务端测试程序:./udp_server_test 5678 ;
  2. 在另一个终端中使用netcat启动一个UDP客户端,并尝试连接测试程序:netcat -u 127.0.0.1 5678
  3. 在netcat终端中输入Hello.并回车,终端应该会再输出一行Hello.,后面一行是UDP服务端测试程序是发送回来的,同时终端上会有相关打印;

Hi3861开发板实验指南

准备网络环境

在Hi3861开发板上运行上述四个测试程序之前,需要先准备网络环境:

  1. 准备一个无线路由器,
  2. 将Linux系统的PC连接到这个无线路由器,
  • 如果是虚拟机运行的Linux系统,需要通过网线连接路由器,并且将虚拟机网口设置为“桥接网卡”,确保能够从路由器分到IP地址(这一点非常重要,因为默认是NAT模式,只能通过虚拟机访问外部环境,外部环境无法通过网络访问虚拟机);
修改网络参数

在Hi3861开发板上运行上述四个测试程序之前,需要根据你的无线路由、Linux系统IP修改net_params.h文件的相关代码:

  • PARAM_HOTSPOT_SSID 修改为你的热点名称
  • PARAM_HOTSPOT_PSK 修改为你的热点密码;
  • PARAM_SERVER_ADDR 修改为你的Linux主机IP地址;
编译和烧录测试程序

在Hi3861开发板上运行上述四个测试程序,需要分别编译、烧录程序;

  1. 需要修改BUILD.gn代码,取消你想要执行的测试程序的注释:
  • 编译TCP客户端测试程序,取消 sources = ["tcp_client_test.c"] 的注释,保留其余三行的sources注释;
  • 编译TCP服务端测试程序,取消 sources = ["tcp_server_test.c"] 的注释,保留其余三行的sources注释;
  • 编译UDP客户端测试程序,取消 sources = ["udp_client_test.c"] 的注释,保留其余三行的sources注释;
  • 编译UDP服务端测试程序,取消 sources = ["udp_server_test.c"] 的注释,保留其余三行的sources注释;
  1. 确认你已经修改了hi3861开发板的编译配置文件build/lite/product/wifiiot.json
  • "//applications/sample/wifi-iot/app"替换为:"//HarmonyOS-IoT-Application-Development:app"
  1. 使用python build.py wifiiot进行编译;
  2. 使用DevEco Device Tool或者HiBurn将二进制程序烧录到Hi3861开发板上;
  3. 烧录成功后暂时不要复位程序;
运行测试程序

Hi3861开发板上运行测试程序的操作流程和Linux上大体相同,只是Linux终端执行测试程序变成了——开发板复位后自动运行;

  • TCP客户端测试:
  1. 在Linux终端中使用netcat启动一个TCP服务端:netcat -l 5678
  2. 连接开发板串口,复位开发板,板上程序启动后,首先会连接WiFi热点,然后会尝试连接到Linux上用netcat启动的TCP服务端;
  3. 在Linux终端中应该会出现开发板上TCP客户端通过发来的Hello,输入World并回车,World将会发送到开发板上,同时开发板的串口会有相关打印;
  • TCP服务端测试:
  1. 重新修改BUILD.gn,放开sources = ["tcp_server_test.c"]的注释,保留其他三行的注释,重新编译、烧录到开发板上;
  2. 连接开发板串口,复位开发板,板上程序启动后,会首先连接WiFi热点,然后会启动TCP服务端,并监听5678端口;
  • 这里需要从串口日志上查看开发板的IP地址,下一步操作需要用到
  1. 在Linux终端中使用netcat启动一个TCP客户端,并尝试连接到开发板:netcat board_ip 5678,其中board_ip是开发板的IP地址;
  2. 在Linux终端中输入Hello并回车,终端应该会再输出一行Hello,后面一行是开发板上TCP服务端序发送回来的,同时开发板的串口会有相关打印;
  • UDP客户端测试:
  1. 重新修改BUILD.gn,放开sources = ["udp_client_test.c"]的注释,保留其他三行的注释,重新编译、烧录到开发板上;
  2. 在Linux终端中使用netcat启动一个UDP服务端:netcat -u -l 5678
  3. 连接开发板串口,复位开发板,板上程序启动后,首先会连接WiFi热点,然后会尝试连接到Linux上用netcat启动的UDP服务端;
  4. 在Linux终端中应该会出现UDP客户端测试程序发来的Hello.,输入World并回车,World将会发送到开发板上,同时开发板的串口会有相关打印;
  • UDP服务端测试:
  1. 重新修改BUILD.gn,放开sources = ["udp_server_test.c"]的注释,保留其他三行的注释,重新编译、烧录到开发板上;
  2. 连接开发板串口,复位开发板,板上程序启动后,会首先连接WiFi热点,然后会启动UDP服务端,并监听5678端口;
  3. 在Linux终端中使用netcat启动一个UDP客户端,并尝试连接到开发板:netcat -u 127.0.0.1 5678
  4. 在Linux终端中输入Hello.并回车,终端应该会再输出一行Hello.,后面一行是UDP服务端测试程序是发送回来的,同时开发板的串口会有相关打印;

Hi3516开发板实验指南

准备网络环境

和在Hi3861开发板上运行测试程序类似,在Hi3516开发板上运行四个测试程序之前,需要先准备网络环境:

  1. 准备一个无线路由器,
  2. 将Linux系统的PC连接到这个无线路由器,
  • 如果是虚拟机运行的Linux系统,需要通过网线连接路由器,并且将虚拟机网口设置为“桥接网卡”,确保能够从路由器分到IP地址(这一点非常重要,因为默认是NAT模式,只能通过虚拟机访问外部环境,外部环境无法通过网络访问虚拟机);
编译测试程序
  1. 确认你已经修改了Hi3516开发板的编译配置文件build/lite/product/ipcamera_hi3516dv300.json
  • "//applications/sample/camera/app:camera_app"所在行之前添加一行配置:

{ "name": "net_test", "dir": "//HarmonyOS-IoT-Application-Development:app", "features":[] },
2. 使用python build.py ipcamera_hi3516dv300进行编译;
3. 编译成功后在out/ipcamera_hi3516dv300/bin目录下会生成四个测试程序:

$ find out/ipcamera_hi3516dv300/ -name *_test
out/ipcamera_hi3516dv300/bin/udp_server_test
out/ipcamera_hi3516dv300/bin/udp_client_test
out/ipcamera_hi3516dv300/bin/tcp_client_test
out/ipcamera_hi3516dv300/bin/tcp_server_test

将测试程序转移到开发板上

有多种方式可以将测试程序从你的Linux主机转移到Hi3516开发板上:

  • 重新烧写rootfs.img映像文件到开发板;
  • 这种方式会刷写整个rootfs分区;
  • 通过T-Flash拷贝;
  • 先将上述四个测试程序从Linux主机拷贝到T-Flash卡上,
  • 再将T-Flash卡从Linux主机上拔下来,插到Hi3516开发板上;
  • 然后将测试程序从T-Flash卡中拷贝到开发板文件系统上;
  • 通过网络和TFTP传输;
  • 先确认Linux主机和开发板直接的IP地址在同一个网段;
  • 可以用ping命令互相测试;
  • 将Linux主机上的几个测试程序拷贝到tftp目录下;
  • 在开发上,通过tftp命令从Linux主机下载测试程序;
  • 先cd到一个有写权限的位置,例如 /usrdata/
  • 执行tftp下载命令:tftp -g -l tcp_client_test -r tcp_client_test $LINUX_IP ,其中$LINUX_IP是你的Linux主机的IP地址
运行测试程序

Hi3861开发板上运行测试程序的操作流程和Linux上几乎完全相同,只是Linux终端执行测试程序变成了——在开发板上的串口终端中执行;

  • TCP客户端测试:
  1. 在Linux终端中使用netcat启动一个TCP服务端:netcat -l 5678
  2. 在开发板串口终端中启动TCP客户端测试程序:./tcp_client_test 5678 $LINUX_IP ,其中$LINUX_IP是你的Linux主机的IP地址;
  3. 在netcat终端中应该会出现TCP客户端测试程序发来的:Hello,输入World并回车,World将会发送到测试程序所在终端;
  • TCP服务端测试:
  1. 在开发板串口终端中启动TCP服务端测试程序:./tcp_server_test 5678 ;
  2. 在Linux终端中使用netcat启动一个TCP客户端,并尝试连接测试程序:netcat $BOARD_IP 5678,其中$BOARD_IP是开发板的IP地址;

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

cat B O A R D I P 5678 ‘ ,其中 ‘ BOARD_IP 5678`,其中` BOARDIP5678‘,其中BOARD_IP`是开发板的IP地址;

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)
[外链图片转存中…(img-EQQUNv9W-1713290027290)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值