TI中文支持网
TI专业的中文技术问题咨询交流网站

LAUNCHCC3235MOD: 在httpget例子基础上修改,想周期获取数据,只有前两次收到数据。请问我应该如何改正?

Part Number:LAUNCHCC3235MOD

TI工程师

您好。

我在httpget的例子基础上加了延时5秒及循环。想定期从服务器获取数据。但是HTTPClient_readResponseBody函数只有第一次循环可以获取数据。

请您指导我一下应该如何修改?

感谢您在百忙中可以看到我的求助,期待您的回答。

/*
 *  ======== httpTask ========
 *  Makes a HTTP GET request
 */
void* httpTask(void* pvParameters)
{bool moreDataFlag = false;char data[HTTP_MIN_RECV];int16_t ret = 0;int16_t len = 0;while(1){sleep(5);Display_printf(display, 0, 0, "Sending a HTTP GET request to '%s'\n",HOSTNAME);HTTPClient_Handle httpClientHandle;int16_t statusCode;httpClientHandle = HTTPClient_create(&statusCode,0);if(statusCode < 0){printError("httpTask: creation of http client handle failed",statusCode);}ret =HTTPClient_setHeader(httpClientHandle,HTTPClient_HFIELD_REQ_USER_AGENT,USER_AGENT,strlen(USER_AGENT)+1,HTTPClient_HFIELD_PERSISTENT);if(ret < 0){printError("httpTask: setting request header failed", ret);}ret = HTTPClient_connect(httpClientHandle,HOSTNAME,0,0);if(ret < 0){printError("httpTask: connect failed", ret);}ret =HTTPClient_sendRequest(httpClientHandle,HTTP_METHOD_GET,REQUEST_URI,NULL,0,0);if(ret < 0){printError("httpTask: send failed", ret);}if(ret != HTTP_SC_OK){printError("httpTask: cannot get status", ret);}Display_printf(display, 0, 0, "HTTP Response Status Code: %d\n", ret);len = 0;do{ret = HTTPClient_readResponseBody(httpClientHandle, data, sizeof(data),&moreDataFlag);if(ret < 0){printError("httpTask: response body processing failed", ret);}Display_printf(display, 0, 0, "%.*s \r\n",ret,data);len += ret;}while(moreDataFlag);Display_printf(display, 0, 0, "Received %d bytes of payload\n", len);ret = HTTPClient_disconnect(httpClientHandle);if(ret < 0){printError("httpTask: disconnect failed", ret);}HTTPClient_destroy(httpClientHandle);}//return(0);
}

Kevin Qiu1:

要周期性获取数据一般需要创建定时器,在你的程序中可能是第二次并没有运行到HTTPClient_readResponseBody,你可以debug单步运行看一下具体的执行情况

赞(0)
未经允许不得转载:TI中文支持网 » LAUNCHCC3235MOD: 在httpget例子基础上修改,想周期获取数据,只有前两次收到数据。请问我应该如何改正?
分享到: 更多 (0)