【鸿蒙开发实录】在Hi3861开发板上发送一个get请求

开发
文章由鸿蒙社区产出,想要了解更多内容请前往:51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz

[[349545]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

由于liteos-m上已经移植了lwip(一个小型开源的TCP/IP协议栈),所以在开发板上面进行网络编程相对来说还是比较方便。相关api可在kernel/网络.md · OpenHarmony/docs - Gitee.com上查看。

技术有限,如有错误还望不吝赐教。

基础:完成官方的快速入门教程

下载源码后可以看到在目录

  1. \\vendor\hisi\hi3861\hi3861\app\demo\src\ 

有许多的例程代码:

而其中刚好有http客户端的代码, 详见\\vendor\hisi\hi3861\hi3861\app\demo\src\app_http_client.c,而我们只需要将这些代码按照官方入门教程的开发方式移植到

  1. \\applications\sample\wifi-iot\app 

(其实官方例程貌似可以不需要更改,但使用的是make/makefile来构造编译,官方教程则是gn/ninja,如果按照官方教程来就只能改代码了)

1、首先需要让开发板连接上网络,详细可参考连志安老师的帖子Hi3861 WiFi操作,热点连接,或者下载下面的源码参考

需要注意的是,在连接进行完WIFI连接操作后,需要使用sleep一段时间,让开发板有足够的时间连接上网络。

  1. int ret; 
  2.    ret = hi_wifi_start_sta(); 
  3.    if(ret == -1) { 
  4.        printf("[Wifi] Connect failed!\n"); 
  5.    } else { 
  6.        printf("[Wifi] Connect sucess!\n"); 
  7.    } 
  8.    sleep(5); 

 2、定义get请求的header以及请求服务器的IP地址

  1. static const char *g_request = "GET / HTTP/1.1\r\n\ 
  2. Content-Type: application/x-www-form-urlencoded;charset=UTF-8\r\n\ 
  3. Host: baidu.com\r\n\ 
  4. Connectionclose\r\n\ 
  5. \r\n"; 
  6. const char addr_ip[] = "192.168.1.103"

 因为http服务是我电脑开启的,所以ip地址是我电脑的局域网ip地址,大家可以直接使用某些公网网站的ip地址进行测试,下面会介绍我的测试方式。

创建一个Socket并连接以及写入请求

  1. struct sockaddr_in addr = {0}; 
  2.    int s, r; 
  3.    char recv_buf[HTTPC_DEMO_RECV_BUFSIZE]; 
  4.    addr.sin_family = AF_INET; 
  5.    addr.sin_port = PP_HTONS(SOCK_TARGET_PORT); 
  6.    addr.sin_addr.s_addr = inet_addr(addr_ip); 
  7.    s = socket(AF_INET, SOCK_STREAM, 0); 
  8.    if (s < 0) { 
  9.        return 1; 
  10.    } 
  11.    printf("... allocated socket"); 
  12.    if (connect(s, (struct sockaddr*)&addr, sizeof(addr)) != 0) { 
  13.        printf("... socket connect failed errno=%d", errno); 
  14.        lwip_close(s); 
  15.        return 1; 
  16.    } 
  17.    printf("... connected"); 
  18.    if (lwip_write(s, g_request, strlen(g_request)) < 0) { 
  19.        lwip_close(s); 
  20.        return 1; 
  21.    } 

 接受获取到的数据并打印 

  1. do { 
  2.       (void)memset_s(recv_buf, sizeof(recv_buf), 0, sizeof(recv_buf)); 
  3.       r = lwip_read(s, recv_buf, sizeof(recv_buf) - 1); 
  4.       for (int i = 0; i < r; i++) { 
  5.           putchar(recv_buf[i]); 
  6.       } 
  7.   } while (r > 0); 

 3、服务端,我是用的是python建立一个http文件服务器,很简单,就在命令行一行代码

  1. python -m http.server 80 

在电脑上可通过127.0.0.1访问,开发板需要和电脑位于同一局域网内,通过ip地址连接。ip地址可在cmd输入ipconfig查看(windows)或Linux shell 输入ifconfig查看(Linux)。也可不用自己建立web服务,访问一个http协议网站的ip地址即可(自行百度),注意不能使用域名访问。

4、结果

可在命令行看到获取的数据


 在web服务器端能看到连接的记录

 


192.168.1.105是开发板的ip地址

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2020-10-30 09:48:03

Hi3861开发板get请求

2020-12-08 12:36:41

Hi3861 ADC驱动开发

2020-10-27 10:08:19

Hi3861ADC驱动

2020-10-14 09:37:03

HiBurn鸿蒙.bin文件

2020-11-18 11:56:06

鸿蒙Hi3861

2021-06-25 15:32:13

鸿蒙HarmonyOS应用

2020-12-15 11:57:49

Hi3861 HarmonyOS开发板

2020-10-30 17:42:36

鸿蒙 OS Hi386

2021-12-20 21:01:52

鸿蒙HarmonyOS应用

2020-11-06 10:15:16

HiBurn

2022-08-19 10:54:47

操作系统鸿蒙

2021-09-16 10:03:39

鸿蒙HarmonyOS应用

2020-10-29 09:53:06

Hi3861硬件开发板

2020-11-24 11:41:30

websocket

2020-12-17 10:02:16

鸿蒙Hi3861开发板

2021-05-14 15:51:01

鸿蒙HarmonyOS应用

2020-11-06 11:32:11

NV操作

2020-12-09 09:44:29

Hi3861硬件介绍鸿蒙开发板

2020-12-02 11:48:05

TFTP

2023-05-26 16:07:14

Hi3861Wifi模块
点赞
收藏

51CTO技术栈公众号