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

OSAaaa
发布于 2020-10-28 00:18
浏览
6收藏

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

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

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

 

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

\\vendor\hisi\hi3861\hi3861\app\demo\src\

有许多的例程代码:

【开发实录】在Hi3861开发板上发送一个get请求-鸿蒙开发者社区而其中刚好有http客户端的代码, 详见\\vendor\hisi\hi3861\hi3861\app\demo\src\app_http_client.c,而我们只需要将这些代码按照官方入门教程的开发方式移植到

\\applications\sample\wifi-iot\app

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

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

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

    int ret;
    ret = hi_wifi_start_sta();
    if(ret == -1) {
        printf("[Wifi] Connect failed!\n");
    } else {
        printf("[Wifi] Connect sucess!\n");
    }
    sleep(5);

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

static const char *g_request = "GET / HTTP/1.1\r\n\
Content-Type: application/x-www-form-urlencoded;charset=UTF-8\r\n\
Host: baidu.com\r\n\
Connection: close\r\n\
\r\n";
const char addr_ip[] = "192.168.1.103";

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

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

    struct sockaddr_in addr = {0};
    int s, r;
    char recv_buf[HTTPC_DEMO_RECV_BUFSIZE];
    addr.sin_family = AF_INET;
    addr.sin_port = PP_HTONS(SOCK_TARGET_PORT);
    addr.sin_addr.s_addr = inet_addr(addr_ip);
    s = socket(AF_INET, SOCK_STREAM, 0);
    if (s < 0) {
        return 1;
    }
    printf("... allocated socket");
    if (connect(s, (struct sockaddr*)&addr, sizeof(addr)) != 0) {
        printf("... socket connect failed errno=%d", errno);
        lwip_close(s);
        return 1;
    }
    printf("... connected");
    if (lwip_write(s, g_request, strlen(g_request)) < 0) {
        lwip_close(s);
        return 1;
    }

接受获取到的数据并打印

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

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

python -m http.server 80

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

4、结果

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

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

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

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

192.168.1.105是开发板的ip地址

httpc_demo.rar 4.49K 109次下载
已于2020-10-28 00:18:40修改
4
收藏 6
回复
举报
6条回复
按时间正序
/
按时间倒序
鲜橙加冰
鲜橙加冰

虽然简单,但确是鸿蒙一个很重要的基础。

回复
2020-10-28 10:27:23
langrisser
langrisser

11.4晚上8点有张荣超老师的直播课,要带大家开发鸿蒙小游戏!超级期待!

《从零开发鸿蒙小游戏App》 https://harmonyos.51cto.com/activity/17

 

已于2020-10-30 10:15:14修改
1
回复
2020-10-28 10:44:01
红叶亦知秋
红叶亦知秋

谢谢有学习到,TCP协议的确是很重要的基础。

回复
2020-10-28 10:50:28
jkfox
jkfox 回复了 langrisser
11.4晚上8点有张荣超老师的直播课,要带大家开发鸿蒙小游戏!超级期待! 《从零开发鸿蒙小游戏App》 https://harmonyos.51cto.com/activity/17

对对对!!!我也报名了!!而且还有抽奖哈哈哈哈哈哈

已于2020-10-30 10:16:30修改
回复
2020-10-28 10:59:52
啧啧啧GKD
啧啧啧GKD 回复了 jkfox
对对对!!!我也报名了!!而且还有抽奖哈哈哈哈哈哈

我每周蹲直播,至今T恤都还没有

回复
2020-10-28 11:03:06
啧啧啧GKD
啧啧啧GKD

受教了    感谢分享

回复
2020-10-28 11:03:45
回复
    相关推荐