虫虫首页|资源下载|资源专辑|精品软件
登录|注册

您现在的位置是:首页 > 技术阅读 >  threadx netx创建http客户端

threadx netx创建http客户端

时间:2024-06-01

文章目录

  • 需求

  • 搭建环境

  • 编写http客户端代码

  • 注意点

  • 测试结果


点击下方阅读原文可访问文中超链接

需求

前面已经移植好了协议栈netx,也完成了UDP通信的测试,说明移植方面应该是没有其它什么问题了。准备开展后续的工作,因为需求的原因,我需要将板子作为http客户端来请求web服务器的数据,然后处理及显示。

搭建环境

开始时我打算用以前学习的goahead来搭建web服务器,然后进行测试,但是没有调试成功,web服务器运行在我的ubuntu中,抓包的时候发现从我的主机(windows)到ubuntu有连续的往来数据包,但都是SYN包,没有ACK等后面的数据包,http客户端返回状态也是未连接,以为是web服务器运行在ubuntu的原因,所以就放弃了。然后在网上下载了一个http服务器工具,这个工具可以搭建一个简单的web服务器,详细见下图:

测试的html文件内容如下,保存为index.html,直接拖动到测试工具中即可:

<!DOCTYPE html>
<html lang="en">
<head>
<title>Home Page</title>
</head>

<body>
<p>Congratulations! The server is up and running.<p/>
</body>
</html>

在浏览器中输入网址访问一下,或者点击工具IP地址栏左边的Open in browser,如果能访问到html文件内的内容就说明web服务器搭建成功了。

编写http客户端代码

参考netx源码目录的http例程(netx\samples\demo_netx_http.c),这个例程是官方用于模拟测试的例程,里面有server端和client端的代码,提取出其中的client端代码,添加到自己的工程中,主要代码如下:

/*创建一个http客户端实例*/
/* Create an HTTP client instance. */
status = nx_http_client_create(&my_client, "HTTP Client", get_nx_ip_handle(), get_packet_pool_handle(), 600);

/*更改端口*/
nx_http_client_set_connect_port(&my_client,HTTP_SERVER_PORT);

for(;;)
{
/*发送一个get请求,获取web服务器的指定内容*/
/* Use the 'NetX' service to send a GET request to the server (can only use IPv4 addresses). */
status = nx_http_client_get_start(&my_client, HTTP_SERVER_ADDRESS, "/index.html",
NX_NULL, 0, NX_NULL, NX_NULL, 50);
/* Check status. */
if (status == NX_NOT_CONNECTED)
{
/*如果状态是未连接则重新发送请求*/
tx_thread_sleep(1000);

continue;
}
else if (status == NX_SUCCESS)
{
/*请求成功,获取数据包*/
status = nx_http_client_get_packet(&my_client,&packet_ptr,10);
if(status == NX_SUCCESS)
{
/*得到数据包的长度*/
nx_packet_length_get(packet_ptr,&len);
/*打印数据包的内容*/
PRINTF("len:%d\r\n%s\r\n",len,packet_ptr->nx_packet_prepend_ptr);
/*释放数据包*/
nx_packet_release(packet_ptr);
}

break;
}
}

/*释放客户端实例资源*/
nx_http_client_delete(&my_client);

http客户端的创建很简单,只需要几行代码就可以完成。

注意点

  • 使用nx_http_client_set_connect_port更改端口地址时,这个传入的端口地址不需要进行大小端转换,可能我开始使用goahead测试的时候一直未连接就是这个问题导致的。

  • 通过源码得知,http使用的版本应该是HTTP/1.0,用的是短连接的方式。

测试结果

本文只测试了get请求,未测试post,但也只是接口不一样而已。

本文源码获取:点我获取本文源码[threadx\threadx_netx_http_client_Demo]

参考文档:
HTTP长连接与短连接