当前位置: 首页 > news >正文

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.鸿蒙南向开发方向

相关文章:

  • Matlab从入门到精通课程
  • Linux 常用命令汇总(八):系统管理 性能监视
  • Vue.js 3.4的新特性
  • 选择最佳图像处理工具OpenCV、JAI、ImageJ、Thumbnailator和Graphics2D
  • 万象奥科携手RT-Thread,线下体验RK3568混合部署!
  • 21个最佳照明设计软件
  • 【学不动系列】lint-staged 使用教程
  • layui框架实战案例(25):laydate中mark的数据后端生成
  • 分别使用TCP/UDP实现互相实时发送消息,接收消息功能
  • Numpy、Matplotlib、Pandas常用函数
  • ActiViz中的数据集vtkPolyData
  • 【c++】类和对象(二)this指针
  • yoloV3的目标检测_3.11
  • Copilot for Microsoft365使用体验
  • MyBatis框架解析与优化
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 2017前端实习生面试总结
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • ES6 ...操作符
  • Git同步原始仓库到Fork仓库中
  • go append函数以及写入
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JS变量作用域
  • Python爬虫--- 1.3 BS4库的解析器
  • 简单实现一个textarea自适应高度
  • 解决iview多表头动态更改列元素发生的错误
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 一道闭包题引发的思考
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • mysql面试题分组并合并列
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​低代码平台的核心价值与优势
  • ​学习一下,什么是预包装食品?​
  • #etcd#安装时出错
  • (6)添加vue-cookie
  • (SpringBoot)第二章:Spring创建和使用
  • (蓝桥杯每日一题)love
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)JAVA中的堆栈
  • (转)一些感悟
  • *p++,*(p++),*++p,(*p)++区别?
  • .apk文件,IIS不支持下载解决
  • .net core Swagger 过滤部分Api
  • .NET单元测试
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .stream().map与.stream().flatMap的使用
  • [2021 蓝帽杯] One Pointer PHP
  • [ACM] hdu 1201 18岁生日
  • [Android] Implementation vs API dependency
  • [Android]使用Retrofit进行网络请求
  • [Avalon] Avalon中的Conditional Formatting.