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.rhkb.cn/news/286893.html

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

相关文章

day07-缓存商品、购物车

1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。 结果: 系统响应慢、用户体验差 1.2 实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓…

Git_.gitignore文件相关知识

.gitignore 作用:指明不对哪些文件进行版本控制。 应当忽略哪些文件? 系统或软件自动生成的文件编译时产生的中间文件和结果文件运行时产生的日志文件,临时文件和缓存文件涉及身份,密码,口令,秘钥等敏感…

Java——基于CompletableFuture的流水线并行处理

CompletableFuture在JDK1.8提供了一种更加强大的异步编程的api。它实现了Future接口,也就是Future的功能特性CompletableFuture也有;除此之外,它也实现了CompletionStage接口,CompletionStage接口定义了任务编排的方法&#xff0c…

C语言结构体之位段

位段(节约内存),和王者段位联想记忆 位段是为了节约内存的。刚好和结构体相反。 那么什么是位段呢?我们现引入情景:我么如果要记录一个人是男是女,用数字0 1表示。我们发现只要一个bit内存就可以完成我们想…

Linux离线安装mysql,node,forever

PS:本文是基于centos7实现的,要求系统能够查看ifconfig和unzip解压命令, 实现无网络可安装运行 首先现在百度网盘的离线文件包****安装Xftp 和 Xshell 把机房压缩包传到 home目录下****解压unzip 包名.zip 获取IP先获取到 linux 主机的ip ifconfig Xftp 连接输入IP,然后按照…

FPGA----ZCU106的petalinux 2019.1使用USB传输数据

1、实际项目中需要用到开发板的串口进行数据交互,之前讲的几节只是启动了网口(如下链接)。因此,本次给大家带来的官方自带串口例程的使用方法,本文的vivado工程和下述连接一样,PL端什么配置都没有。 FPGA-…

ElasticSearch8 - 基本操作

前言 本文记录 ES 的一些基本操作,就是对官方文档的一些整理,按自己的习惯重新排版,凑合着看。官方的更详细,建议看官方的。 下文以 books 为索引名举例。 新增 添加单个文档 (没有索引会自动创建) POST books/_doc {"n…

flutter 弹窗之系列三

Overlay 部分源码 class Overlay extends StatefulWidget{...static OverlayState of(BuildContext context, {bool rootOverlay false,Widget debugRequiredFor,})... } // rootOverlay: // 值为false, 就近查找,找到树中最近的节点; // 如果为true, 则去找最顶…

数据库专题(oracle基础和进阶)

前言 本专题主要记录自己最近学的数据库,有兴趣一起补习的可以一起看看,有补充和不足之处请多多指出。希望专题可以给自己还有读者带去一点点提高。 数据库基本概念 本模块有参考:数据库基本概念-CSDN博客 数据库管理系统是一个由互相关联的…

[Java基础揉碎]抽象类

目录 通过问题引出 介绍 关键点 细节 ​编辑 抽象类的最佳设计模式--模版设计模式 1.先用最容易想到的方法 2.分析问题,提出使用模板设计模式 通过问题引出 假如我们有个动物类, 动物都有eat吃的方法, 但是具体吃什么, 我们不知道, 因为是什么动物我们不知道…

Git版本控制

这是两个学习Git推荐必看的文档,第一个链接是Git的官方权威文档,第二个链接是国内程序员在开发中,总结的Git快速入门教程,掌握这个,也足够应付在工作中的场景。 Git权威书籍《ProGit》中文版https://gitee.com/progit…

jdk11中自定义java类在jvm是如何被查找、加载

yym带你了解jvm源码,openjdk11源码,java类jvm加载原理 jdk11中java类在jvm是如何被1查找、2加载 以下说明的是MiDept类是如何被java classloader 和 jvm加载步骤 上源代码 public static void main(String[] args) {Thread.currentThread().setName…

Python机器学习赋能GIS:地质灾害风险评价的新方法论

地质灾害是指全球地壳自然地质演化过程中,由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下,地质灾害在世界范围内频繁发生。我国除滑坡灾害外,还包括崩塌、泥石流、地面沉…

k8s记录-基础配置1

1、基础yaml文件格式 1.1、namespace apiVersion: v1 kind: Namespace metadata:name: namelabels:name: namekubectl apply -f namespace.yaml 1.2、Service service示例 apiVersion: v1 kind: Service metadata:name: ilanni-httpd-svcnamespace: ilanni-namespace spec:…

【代驾+顺风车+货运】全开源双端APP代驾+顺风车+货运代驾小程序源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 一、详细介绍 系统是基于Thinkphpuniapp开发的,全开源未加密,这套源码可以拿回去自己做二开 后台用户端司机端 功能详情介绍: 车主实名认证,驾驶证认证,车…

大学生实习被企业坑了,教训比较深刻

帮实习生解决一些疑惑,所以出了一个视频,大家多多支持 实习途径 1 靠自己(招聘平台投简历,大专及普通大学的选择) 2 靠关系(亲人、老师、朋友帮推荐,有关系就是好) 3 靠校招&#xf…

ROS机器人入门第四课:话题通信

文章目录 ROS机器人入门第四课:话题通信一、话题通信概述(一)概念(二)作用 二、话题通信基本操作需求:分析:流程:(一)发布方解释一些关键的ROS函数和概念: (二&#xff0…

力扣刷题44-46(力扣0062/0152/0198)

62. 不同路径 题目描述: 一个机器人位于一个 m x n 网格的左上角 ,机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径? 思路: 其实就是问(0,0)->(m-1,n-1)一共有几条路。 第一个…

office办公技能|word中的常见使用问题解决方案2.0

一、设置多级列表将表注从0开始,设置为从1开始 问题描述:word中插入题注,出来的是表0-1,不是1-1,怎么办? 写论文时,虽然我设置了“第一章”为一级标题,但是这三个字并不是自动插入的…