不能直接拷贝截图,真是麻烦

/** GetFile.c**  Created on: 2015年9月22日*      Author: Administrator*/
#include "GetFile.h"
static unsigned int S_DestinationIP;
static unsigned char G_Buff[6000];
static unsigned char G_BuffLen = 6000;
static int readGetResponse(HTTPCli_Handle httpClient) {long lRetVal = 0;int readByteLen;int allReadByte;int oneReadByte;int bytesRead = 0;int id = 0;unsigned long len = 0;int json = 0;char *dataBuffer = NULL;bool moreFlags = 1;int i;//设置的是响应头//这个就是一个过滤器,过滤出我们想要的响应头的信息const char *ids[6] = {HTTPCli_FIELD_NAME_CONTENT_LENGTH,HTTPCli_FIELD_NAME_CONTENT_TYPE,HTTPCli_FIELD_NAME_DATE,HTTPCli_FIELD_NAME_SERVER,HTTPCli_FIELD_NAME_TRANSFER_ENCODING,NULL };/* Read HTTP POST request status code */lRetVal = 0;//获取相应状态//成功是200,其他的不做考虑G_BuffLen = 0;lRetVal = HTTPCli_getResponseStatus(httpClient);if (lRetVal > 0) {switch (lRetVal) {case 200:UART_PRINT("HTTP Status 200\n\r");//把过滤器跟httpClient关联起来HTTPCli_setResponseFields(httpClient, (const char **) ids);//用一个循环来处理响应头//如果有对应的响应头字段的话,id等于ids的索引while ((id = HTTPCli_getResponseField(httpClient, (char *) G_Buff,sizeof(G_Buff), &moreFlags)) != HTTPCli_FIELD_ID_END) {switch (id) {case 0: {            //HTTPCli_FIELD_NAME_CONTENT_LENGTH//获取到Content-Length的信息,这个就是主体的长度//请注意这个不一定是有的,。请注意,而且我们后面是需要这个字段的值//抓包又抓不到,网上又没有好的调试用具,最后模拟post的数据提交,才发现//我的服务器一直不发出这个字段。。。导致我很伤心readByteLen = strtoul((char *) G_Buff, NULL, 10);UART_PRINT("\r\n%s", HTTPCli_FIELD_NAME_CONTENT_LENGTH);UART_PRINT(" : %d\r\n", readByteLen);}break;case 1: /* HTTPCli_FIELD_NAME_CONTENT_TYPE */{UART_PRINT("\r\n%s", HTTPCli_FIELD_NAME_CONTENT_TYPE);UART_PRINT(" : %s\r\n", G_Buff);}break;case 2: /* HTTPCli_FIELD_NAME_DATE */{UART_PRINT("\r\n%s", HTTPCli_FIELD_NAME_DATE);UART_PRINT(" : %s\r\n", G_Buff);}break;case 3: /* HTTPCli_FIELD_NAME_SERVER */{UART_PRINT("\r\n%s", HTTPCli_FIELD_NAME_SERVER);UART_PRINT(" : %s\r\n", G_Buff);}break;case 4: {/* HTTPCli_FIELD_NAME_TRANSFER_ENCODING */UART_PRINT("\r\n%s", HTTPCli_FIELD_NAME_TRANSFER_ENCODING);UART_PRINT(" : %s\r\n", G_Buff);}break;default: {UART_PRINT("Wrong filter id = %d\r\n", id);lRetVal = -1;goto end;}}}//如果你能获取长度,那么就能使用这个函数获取到主体部分//不然你得用HTTPCli_readRawResponseBody这个来获取,这个大概 就是获取原始的主体的内容//HTTPCli_readResponseBody获取到的是经过处理过的主体的内容moreFlags = 1;while(moreFlags) {oneReadByte = HTTPCli_readResponseBody(httpClient, (char *) G_Buff,sizeof(G_Buff) -1 , &moreFlags);if (oneReadByte < 0) {UART_PRINT("Failed to received response body\n\r");lRetVal = bytesRead;goto end;} else {for(i = 0; i < oneReadByte;i++){UART_PRINT("%c",G_Buff[i]);}allReadByte =  allReadByte + oneReadByte;}}UART_PRINT("HTTP Status 200 end \r\n");break;case 404:UART_PRINT("File not found. \r\n");/* Handle response body as per requirement.Note:Developers are advised to take appopriate action for HTTPreturn status code else flush the response body.In this example we are flushing response body in defaultcase for all other than 200 HTTP Status code.*/default:/* Note:Need to flush received buffer explicitly as library will not dofor next request.Apllication is responsible for reading all thedata.*/UART_PRINT("HTTP Status %d\n\r", lRetVal);break;}} else {UART_PRINT("Failed to receive data from server.\r\n");lRetVal = -1;goto end;}end:return lRetVal;
}
extern signed int siIp_StrToInt(char *cpIp, unsigned int *uipIp);
static int ConnectToHTTPServer(HTTPCli_Handle httpClient) {long lRetVal = -1;struct sockaddr_in addr;//转化IPsiIp_StrToInt("103.44.145.245", &S_DestinationIP);/* Set up the input parameters for HTTP Connection */addr.sin_family = AF_INET;addr.sin_port = htons(80);addr.sin_addr.s_addr = sl_Htonl(S_DestinationIP);/* Testing HTTPCli open call: handle, address params only *///初始化httpClientHTTPCli_construct(httpClient);//连接服务器lRetVal = HTTPCli_connect(httpClient, (struct sockaddr *) &addr, 0, NULL);if (lRetVal < 0) {UART_PRINT("Connection to server failed. error(%d)\n\r", lRetVal);ASSERT_ON_ERROR(-3);} else {UART_PRINT("Connection to server created successfully\r\n");}return 0;
}
static int HTTPGetMethod(HTTPCli_Handle httpClient) {bool moreFlags = 1;bool lastFlag = 1;char tmpBuf[8];long lRetVal = 0;char *str, *strOut;//设置头部//头部就是名跟值的对应关系、//HTTPCli_Field fields[4] = {{ HTTPCli_FIELD_NAME_HOST, "hytgab.oicp.net" }, {HTTPCli_FIELD_NAME_ACCEPT, "*/*" },{HTTPCli_FIELD_NAME_CONTENT_LENGTH, "0"},{NULL, NULL } };/* Set request header fields to be send for HTTP request. *///设置头部到httpClientHTTPCli_setRequestFields(httpClient, fields);moreFlags = 0;//发送头部信息//当moreFlags = 1,表明我们需要发送更多的字段lRetVal = HTTPCli_sendRequest(httpClient, HTTPCli_METHOD_GET,"/smarthw_bae/test.img", moreFlags);if (lRetVal < 0) {UART_PRINT("Failed to send HTTP POST request header.\n\r");return lRetVal;}//处理响应lRetVal = readGetResponse(httpClient);HTTPCli_disconnect(httpClient);HTTPCli_delete(httpClient);return lRetVal;
}
void vGetFileTestTask(void *pvParameters) {int tick = 0;HTTPCli_Struct httpClient;scNetStaInit();osi_Sleep(1000);UART_PRINT("vHttpToServer\r\n");//连接到服务器,httpClient就是内部需要的一个结构体,ConnectToHTTPServer(&httpClient);HTTPGetMethod(&httpClient);while (1) {osi_Sleep(1000);}
}

时间有限,就先这样的,赶紧睡觉去了,代码比较乱

一起学CC3200之OTA固件升级(使用HTTP方式下载APP:初级篇)相关推荐

  1. OTA固件升级对于物联网设备的重要性

    物联网(IoT)代表着一个重要的发展趋势,逐渐将日常生活中的各个方面相互连接在一起.不同于早期的路由器等无线设备(每个房间或者办公室安装一个)在数量上的局限性,物联网将会非常深入的渗透到方方面面,并且 ...

  2. 如何使用蓝牙实现OTA固件升级

    作为一种低成本的近距离无线连接协议,蓝牙在现实生活中的应用非常广泛,各种嵌入式.物联网设备随处可见.基于这一特性,我们今天讲一下如何使用蓝牙实现OTA固件升级. 一.概述 所谓DFU(Device F ...

  3. MCU、Linux实现OTA固件升级要点

    关注+星标公众号,不错过精彩内容 来源 | CSDN 作者 | bulebin OTA的应用比较广泛,今天给大家分享一些嵌入式实现OTA升级的常见技术. 一.简介 1.1  概念 OTA:Over-t ...

  4. 图文手把手教程--ESP32 MQTT连接腾讯云物联网平台及OTA固件升级

    本文内容 1)在腾讯云物联网开发平台,新建项目,并在项目下新建设备"light_001". 2)下载腾讯云SDK-esp-qcloud,使用例程led_light,通过" ...

  5. c++ sort 从大到小排序_C语言必学的12个排序算法:堆排序(第7篇)

    题外话堆排序比之前的简单选择.冒泡算法.快速排序算法复杂一些,因为用到了树形数据结构,但是本文使用了数组实现完全二叉树,因此也比较简单.C语言初学者,可以简单了解其思想,具体的知识掌握可以参照数据结构 ...

  6. c++ 快速排序_C语言必学的12个排序算法:归并排序(第8篇)

    题外话很多童鞋感受算法比较难度,的确,算法其实和C语言本身关系不大,算法是计算机科学家利用丰富的数学和算法设计知识研究出来,如今我们只需拿来主义,学习使用即可,当然这需要一定的努力过程. [C语言必学 ...

  7. 跟我学,你的服务器够安全吗?第四篇----tomcat安全篇

    目录 前言 1.限制服务器平台信息泄漏(高危) 2.禁止显示异常调试信息(高危) 3.AJP协议文件读取与包含严重漏洞(高危) 4.开启日志记录(高危) 5.禁止Tomcat显示目录文件列表(高危) ...

  8. NRF51822 烧录bootloader 后,需要OTA一次,才能启动App解决办法

    Nordic 51822 烧录bootloader 后,需要OTA一次,才能启动App解决办法 使用nrfjprog烧写寄存器标志位 nrfjprog --memwr 0x3FC00 --val 0x ...

  9. CSR蓝牙遥控器OTA固件升级

    目录 概述... 2 OTA升级过程简介... 2 日志... 2 img文件格式... 3 各个img文件的关系... 4 OTA EEPROM Memory Map. 4 CSR OTA Upda ...

最新文章

  1. 讲讲我当年是怎么拿到AI研发公司offer的
  2. python中的Lock与RLock
  3. Golang slice原理
  4. Swift 范的 CGRect、CGSize 和 CGPoint
  5. Linux文件管理以及一些常用的基础命令解析
  6. $$和$BASHPID区别
  7. java cdi是什么意思_Java EE CDI的真正好处
  8. CDH、CM下载403,Cloudera收费无法下载解决,CDH安装包下载
  9. MTK 驱动开发(16)---LCM 移植
  10. UI设计师应该知道的汉字体种类的用途(免费素材)
  11. 走入asp.net mvc不归路:[4]说说Action有哪些常见成员
  12. abp后台任务BackGroundWorker
  13. java处理最后一周_Java得到的一周的最后一天的一段时间内
  14. Linux安装中文字体
  15. 人工智能-八数码问题-启发式搜索
  16. Python实现简单的层次聚类算法以及可视化
  17. python实训day8
  18. 读论文(4)——FPN
  19. MySQL导入myi,myd,frm文件及浏览
  20. LaTeX 使用tips与EDAS论文提交

热门文章

  1. 语音情感识别--踩点篇
  2. notejs NPM切换到淘宝源
  3. 在你的DLL中,如何导入(导出)一个类,使得其他项目可以调用该类?
  4. 现代微积分的公理系统
  5. 状态空间搜索或者空间搜索或者迷宫问题总结(递归法、回溯法)Python(递归一般用栈,回溯是循环)
  6. 计算机网络考前复习整理
  7. 九 关系 Relations
  8. 计算机对孩子的影响英语作文,电视对孩子们的影响英语作文附翻译
  9. 在Ubuntu下,编译Kernel报错:Makefile:xxx: recipe for target 'xxx' failed
  10. Python3之爬虫爬取豆瓣读书Top250