threadx netx创建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长连接与短连接

欢迎扫码关注我的微信公众号
漫长当下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值