UDP客户端实验
netcat简介
netcat 是什么?
netcat是一个非常强大的网络实用工具,可以用它来调试TCP/UDP应用程序;
netcat 如何安装?
Linux上可以使用发行版的包管理器安装,例如Debian/Ubuntu上:
sudo apt-get install netcat
Windows上,MobaXterm工具上也可以用 apt-get install netcat 安装;
netcat 如何使用?
开始之前,先简单介绍一下 netcat 的几种用法:
- TCP服务端模式:
netcat -l 5678 ,会启动一个TCP服务器,监听5678 端口,你可以换成其他端口;
- TCP客户端模式:
netcat localhost 5678 ,localhost 是目标主机参数,可以换成其他你想要连接的主机(主机名、IP地址、域名都可以),5678 是端口;
- 你如果在同一台机器的两个终端中分别执行上述两条命令,它们两者之间就会建立连接一条TCP连接,此时你在其中一个终端上输入字符,敲回车就会发送到另一个终端中;
- UDP服务端模式:
netcat -u -l 6789 , 没错,只需要加一个-u 参数,就可以启动一个UDP服务端;
- UDP客户端模式:
netcat -u localhost 6789 ,
- 类似的,在同一台机器的两个终端中分别执行上述两条命令,他们两者之间也可以收发消息,只不过是UDP报文;
LwIP简介
LwIP是什么?
A Lightweight TCP/IP stack 一个轻量级的TCP/IP协议栈
详细介绍请参考LwIP项目官网:https://savannah.nongnu.org/projects/lwip/
LwIP在openharmony上的应用情况
目前,openharmony源码树有两份LwIP:
- third_party/lwip
- 源码形式编译
- 供liteos-a内核使用
- 还有一部分代码在kernel/liteos_a中,一起编译
- vendor/hisi/hi3861/hi3861/third_party/lwip_sack
- hi3861-sdk的一部分
- 静态库形式编译
- 不可修改配置
- 可以查看当前配置
文件说明
文件:
文件名 |
说明 |
BUILD.gn |
OpenHarmony 构建脚本,支持Hi3861、Hi3518、Hi3516开发板 |
demo_entry_cmsis.c |
OpenHarmony liteos-m程序入口,支持Hi3861 |
demo_entry_posix.c |
OpenHarmony liteos-a和Unix系统程序入口,Hi3516、Hi3518、PC |
Makefile |
Unix系统构建脚本,支持Linux/Mac OS |
net_common.h |
系统网络接口头文件 |
net_demo.h |
demo脚手架头文件 |
net_params.h |
网络参数,包括WiFi热点信息,服务器IP、端口信息 |
tcp_client_test.c |
TCP客户端 |
tcp_server_test.c |
TCP服务端 |
udp_client_test.c |
UDP客户端 |
udp_server_test.c |
UDP服务端 |
wifi_connecter.c |
OpenHarmony WiFi STA模式API的封装实现文件,比原始接口更容易使用 |
wifi_connecter.h |
OpenHarmony WiFi STA模式API的封装头文件,比原始接口更容易使用 |
说明:
适用版本:OpenHarmony1.0.1~3.0
OpenHarmony源码下载:https://gitee.com/openharmony/docs/tree/master/zh-cn/release-notes
Demo源码下载:https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/dev/team_x/demo_udpclient
Linux主机实验指南
编译测试程序
使用如下命令进行编译:
make 编译测试程序,该命令会生成4个可执行文件和几个.o文件
make clean 删除可执行程序和.o文件
运行测试程序
Linux系统可以在同一台机器上,使用多个终端进行测试;
- TCP客户端测试:
- 在一个终端中使用netcat启动一个TCP服务端:
netcat -l 5678 ;
- 在另一个终端中启动TCP客户端测试程序:
./tcp_client_test 5678 127.0.0.1 ;
- 在netcat终端中应该会出现TCP客户端测试程序发来的:
Hello ,输入World 并回车,World 将会发送到测试程序所在终端;
- TCP服务端测试:
- 在一个终端中启动TCP服务端测试程序:
./tcp_server_test 5678 ;
- 在另一个终端中使用netcat启动一个TCP客户端,并尝试连接测试程序:
netcat 127.0.0.1 5678 ;
- 在netcat终端中输入
Hello 并回车,终端应该会再输出一行Hello ,后面一行是TCP服务端测试程序发送回来的,同时终端上会有相关打印;
- UDP客户端测试:
- 在一个终端中使用netcat启动一个UDP服务端:
netcat -u -l 5678 ;
- 在另一个终端中启动UDP客户端测试程序:
./udp_client_test 5678 127.0.0.1 ;
- 在netcat终端中应该会出现UDP客户端测试程序发来的
Hello. ,输入World 并回车,World 将会发送到测试程序所在终端;
- UDP服务端测试:
- 在一个终端中启动UDP服务端测试程序:
./udp_server_test 5678 ;
- 在另一个终端中使用netcat启动一个UDP客户端,并尝试连接测试程序:
netcat -u 127.0.0.1 5678 ;
- 在netcat终端中输入
Hello. 并回车,终端应该会再输出一行Hello. ,后面一行是UDP服务端测试程序是发送回来的,同时终端上会有相关打印;
Hi3861开发板实验指南
准备网络环境
在Hi3861开发板上运行上述四个测试程序之前,需要先准备网络环境:
- 准备一个无线路由器,
- 将Linux系统的PC连接到这个无线路由器,
- 如果是虚拟机运行的Linux系统,需要通过网线连接路由器,并且将虚拟机网口设置为“桥接网卡”,确保能够从路由器分到IP地址(这一点非常重要,因为默认是NAT模式,只能通过虚拟机访问外部环境,外部环境无法通过网络访问虚拟机);
修改网络参数
在Hi3861开发板上运行上述四个测试程序之前,需要根据你的无线路由、Linux系统IP修改net_params.h 文件的相关代码:
- PARAM_HOTSPOT_SSID 修改为你的热点名称
- PARAM_HOTSPOT_PSK 修改为你的热点密码;
- PARAM_SERVER_ADDR 修改为你的Linux主机IP地址;
编译和烧录测试程序
在Hi3861开发板上运行上述四个测试程序,需要分别编译、烧录程序;
- 需要修改
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 注释;
- 使用
hb build -f 进行编译;
- 使用DevEco Device Tool或者HiBurn将二进制程序烧录到Hi3861开发板上;
- 烧录成功后暂时不要复位程序;
运行测试程序
Hi3861开发板上运行测试程序的操作流程和Linux上大体相同,只是Linux终端执行测试程序变成了——开发板复位后自动运行;
- TCP客户端测试:
- 在Linux终端中使用netcat启动一个TCP服务端:
netcat -l 5678 ;
- 连接开发板串口,复位开发板,板上程序启动后,首先会连接WiFi热点,然后会尝试连接到Linux上用netcat启动的TCP服务端;
- 在Linux终端中应该会出现开发板上TCP客户端通过发来的
Hello ,输入World 并回车,World 将会发送到开发板上,同时开发板的串口会有相关打印;
- TCP服务端测试:
- 重新修改BUILD.gn,放开
sources = ["tcp_server_test.c"] 的注释,保留其他三行的注释,重新编译、烧录到开发板上;
- 连接开发板串口,复位开发板,板上程序启动后,会首先连接WiFi热点,然后会启动TCP服务端,并监听
5678 端口;
- 这里需要从串口日志上查看开发板的IP地址,下一步操作需要用到
- 在Linux终端中使用netcat启动一个TCP客户端,并尝试连接到开发板:
netcat board_ip 5678 ,其中board_ip 是开发板的IP地址;
- 在Linux终端中输入
Hello 并回车,终端应该会再输出一行Hello ,后面一行是开发板上TCP服务端序发送回来的,同时开发板的串口会有相关打印;
- UDP客户端测试:
- 重新修改BUILD.gn,放开
sources = ["udp_client_test.c"] 的注释,保留其他三行的注释,重新编译、烧录到开发板上;
- 在Linux终端中使用netcat启动一个UDP服务端:
netcat -u -l 5678 ;
- 连接开发板串口,复位开发板,板上程序启动后,首先会连接WiFi热点,然后会尝试连接到Linux上用netcat启动的UDP服务端;
- 在Linux终端中应该会出现UDP客户端测试程序发来的
Hello. ,输入World 并回车,World 将会发送到开发板上,同时开发板的串口会有相关打印;
- UDP服务端测试:
- 重新修改BUILD.gn,放开
sources = ["udp_server_test.c"] 的注释,保留其他三行的注释,重新编译、烧录到开发板上;
- 连接开发板串口,复位开发板,板上程序启动后,会首先连接WiFi热点,然后会启动UDP服务端,并监听
5678 端口;
- 在Linux终端中使用netcat启动一个UDP客户端,并尝试连接到开发板:
netcat -u 127.0.0.1 5678 ;
- 在Linux终端中输入
Hello. 并回车,终端应该会再输出一行Hello. ,后面一行是UDP服务端测试程序是发送回来的,同时开发板的串口会有相关打印;
|