Harmony OS 网络编程 实验指南

netcat简介

netcat 是什么?

netcat是一个非常强大的网络实用工具,可以用它来调试TCP/UDP应用程序;

netcat 如何安装?

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连接,此时你在其中一个终端上输入字符,敲回车就会发送到另一个终端中;
  3. UDP服务端模式: netcat -u -l 6789, 没错,只需要加一个-u参数,就可以启动一个UDP服务端;
  4. 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中,一起编译
  2. 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注释;
  2. 确认你已经修改了hi3861开发板的编译配置文件build/lite/product/wifiiot.json
    • "//applications/sample/wifi-iot/app"替换为:"//HarmonyOS-IoT-Application-Development:app"
  3. 使用python build.py wifiiot进行编译;
  4. 使用DevEco Device Tool或者HiBurn将二进制程序烧录到Hi3861开发板上;
  5. 烧录成功后暂时不要复位程序;

运行测试程序

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地址,下一步操作需要用到
    3. 在Linux终端中使用netcat启动一个TCP客户端,并尝试连接到开发板:netcat board_ip 5678,其中board_ip是开发板的IP地址;
    4. 在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目录下;
      • Linux系统上安装和配置tftp服务,可参考:https://community.arm.com/developer/tools-software/oss-platforms/w/docs/495/tftp-remote-network-kernel-using-u-boot
    • 在开发上,通过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地址;
    3. 在Linux终端中输入Hello并回车,终端应该会再输出一行Hello,后面一行是开发板上TCP服务端测试程序发送回来的,开发板串口终端上会有相关打印;
  • UDP客户端测试:
    1. 在Linux终端中使用netcat启动一个UDP服务端:netcat -u -l 5678
    2. 在开发板串口终端中启动UDP客户端测试程序:./udp_client_test 5678 $LINUX_IP,其中$LINUX_IP是你的Linux主机的IP地址;
    3. 在Linux终端中应该会出现UDP客户端测试程序发来的Hello.,输入World并回车,World将会发送到开发板上,开发板串口终端上会有相关打印;
  • UDP服务端测试:
    1. 在开发板串口终端中启动UDP服务端测试程序:./udp_server_test 5678 ;
    2. 在Linux终端中使用netcat启动一个UDP客户端,并尝试连接测试程序:netcat -u $BOARD_IP 5678,其中$BOARD_IP是开发板的IP地址;
    3. 在Linux终端中输入Hello.并回车,终端应该会再输出一行Hello.,后面一行是UDP服务端测试程序是发送回来的,开发板串口终端上会有相关打印;

Hi3518开发板实验指南

准备网络环境

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

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

Hi3518开发板连接WiFi热点

Hi3518连接WiFi热点需要使用wpa_supplicant和相关配置文件;

  • 编译wap_supplicant程序:

    1. 打开编译wpa_supplicant编译配置:

      • 修改配置文件applications\sample\camera\communication\BUILD.gn中的features,向其中添加:

        "wpa_supplicant:wpa_sample"

    2. 执行编译命令:python build.py ipcamera_hi3518ev300

  • 准备wap_supplicant配置文件;

country=GB
ctrl_interface=udp
network={ssid="example" # 热点名称# key_mgmt=NONE # for OPEN Access Pointpsk="12345678" # 热点密码
}
  • 将编译生成的wpa_supplicant程序和准备好的wpa_supplicant.conf拷贝到T-Flash卡,然后将T-Flash卡插到开发板上;

  • 运行wpa_supplicant程序,开发板启动后,在串口终端中:

    • 执行命令:cd sdcard, 跳转到T-Flash卡所在目录,
    • 执行命令:wpa_supplicant -i wlan0 -c wpa_supplicant.conf,如果配置文件中的热点名称和密码没错的话,将会连接上WiFi热点;
    • 执行命令:ifconfig,查看网络配置信息,连接WiFi热点成功之后,可以查看到IP地址;

编译测试程序

和Hi3516开发板的操作流程一致,参考前面的描述;

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

和Hi3516开发板的操作流程一致,参考前面的描述;

运行测试程序

和Hi3516开发板的操作流程一致,参考前面的描述;

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

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

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

相关文章

pycharm使用远程服务器的jupyter环境

1、确保服务器上安装了jupyter,如果没有,执行下面命令安装 pip install jupyter2、启动jupyter notebook服务 jupyter notebook --no-browser --port8888 --ip0.0.0.0 --allow-root表明在服务器的8888 端口上启动 Jupyter Notebook,并允许从任何 IP 地…

安捷伦Agilent E5071B网络分析仪

181/2461/8938产品概述: Agilent E5071B 网络分析仪可为射频组件提供快速、准确的测量。与同类网络分析仪相比,其宽动态范围和低迹线噪声可实现更高的测试质量和吞吐量。内置 2、3 和 4 个测试端口可同时测量具有最多四个端口的组件的所有信号路径。Agi…

Jenkins中支持maven构建遇到仓库报错问题

目的 Jenkins中支持maven构建(Jenkins使用docker安装) 问题 1.构建一个maven项目 2.执行报错 /var/lib/jenkins/local_maven_repo/com/sx/root/1.0.4/root-1.0.4.pom.part.lock (No such file or directory) Failed to transfer Could not transfer artifact co…

python(django)之单一接口管理功能后台开发

1、创建数据模型 在apitest/models.py下加入以下代码 class Apis(models.Model):Product models.ForeignKey(product.Product, on_deletemodels.CASCADE, nullTrue)# 关联产品IDapiname models.CharField(接口名称, max_length100)apiurl models.CharField(接口地址, max_…

2024年3月更新,10个AI绘画工具推荐

本文整理了10个热门的AI绘图在线生成器,为设计师们和创意工作者提供一份全面的参考,帮助大家在创作过程中更上一层楼! 1. Midjourney Midjourney是一款非常流行的AI绘图在线生成器,拥有简洁明了的界面和丰富的绘画功能&#xf…

第十三届蓝桥杯省赛真题 Java 研究生 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 排列字母试题 B: 灭鼠先锋试题 C: 质因数个数试题 D: 数位排序试题 E: 蜂巢试题 F : \mathrm{F}: F: 爬树的甲壳虫试题 G: 重新排序试题 H \mathrm{H} H : 技能升级试题 I: 最优清零方案试题 J : \mathrm{J}: J: 推导部分和 发现宝藏 …

百能云板开启高品质铝基PCB线路板定制服务

铝基板是一种具有良好散热功能的金属基覆铜板,一般单面板由三层结构所组成,分别是电路层(铜箔)、绝缘层和金属基层。用于高端使用的也有设计为双面板,结构为电路层、绝缘层、铝基、绝缘层、电路层。极少数应用为多层板…

代码随想录算法训练营第三十天| 回溯算法总结

回溯算法核心:for循环横向遍历,递归纵向遍历,回溯不断调整结果集。对于startIndex(startIndex来控制for循环的起始位置)的使用: 如果是一个集合来求组合的话,就需要startIndex,例如…

程序员35岁会失业吗?【来自主流AI的回答】

程序员35岁会失业吗? 35岁被认为是程序员职业生涯的分水岭,许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长,技术更新换代的速度会使得资深程序员难以跟上;而另一些人则认为,丰富的经…

【C#实战】SimpleJSON字典反序列化

C# 解析JSON道路千万条,其中最流行的还是由Newtonsoft出品的Json.NET,只需要将Json的结构做成C#的class,即可实现完美的序列化和反序列化。更重要的是它还支持LINQ。 Product product new Product(); product.Name "Apple"; pro…

Spring Boot | SpringBoo“开发入门“

目录 : 1.SpringBoot的“介绍”SpringBoot”概述” :SpringBoot”简介“SpringBoot的“优点” 2. SpringBoot入门程序环境准备使用 “Maven”方式构建SpringBoot 项目使用“Spring Initializr”方式构建Spring Boot 项目 3. “单元测试” 和“热部署”单元测试热部署…

lvgl 窗口 windows lv_port_win_visual_studio 版本 已解决

不知道的东西,不知道lvgl窗口。一切从未知开始 lv_port_win_visual_studio 主分支 对应的分支 v7版本更新git submodule update --init --recursive同步 lvgl代码随后打开 visualSudio 打开.sln 文件 编译 release模式 允许 一切正常代码部分