This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] WEBENCH®︎工具/CC3235S:CC3235S HTTP POST 方法周期操作被卡住

Guru**** 2558250 points
Other Parts Discussed in Thread: CC3235S

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/908406/webench-tools-cc3235s-cc3235s-http-post-method-cycle-operation-is-stuck

器件型号:CC3235S

工具/软件:WEBENCHRegistered设计工具

大家好、我在程序中使用 CC3235S 时遇到了问题。CC3235S 周期操作 HTTP POST 方法任务、任务周期操作在开始时成功、但在运行15次时、程序 卡在 HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_POST、POST_REQUEST_URI、
                              Post_Data_Buffer、strlen (Post_Data_Buffer)、HttpClient_Drop_Body) API 函数。 故障代码处是否设置有任何错误?

for (;;)
   {
     OSI_SyncObjWait (&xBinary0、OSI_WAIT_FOREVE); //等待操作消息

httpClientHandle = HttpClient_create (&ret、0);
     if (ret < 0)
     {
#ifdef debug_post
       OSI_Report ("创建 http 客户端句柄失败、错误代码=%d.\r\n"、ret);
#endif
       退货失败;
     }

RET = HttpClient_setHeader (httpClientHandle、HttpClient_HFIELD_REQ_Accept、
                              USER_ACCEPT、strlen (USER_ACCEPT)+1、HttpClient_HFIELD_PERSISTENT);
     if (ret < 0)
     {
#ifdef debug_post
       OSI_Report ("设置请求标头失败、错误代码=%d.\r\n"、ret);
#endif
       退货失败;
     }

RET = HttpClient_connect (https://ClientHandle、HOSTNAME、0、0);
     if (ret < 0)
     {
         退货失败;
     }

RET =HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_POST、POST_Request_URI、
                            "{\"传感器\":["、strlen ("{\"传感器\":[")、HttpClient_chunch_start);
     if (ret < 0)
     {
#ifdef debug_post
       OSI_Report ("httpTask:发送失败、错误代码=%d。"、ret);
#endif
       退货失败;
     }

RET = HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_POST、POST_Request_URI、
                              Post_Data_Buffer、strlen (Post_Data_Buffer)、HttpClient_Drop_Body);
       if (ret < 0)
       {
#ifdef debug_post
         OSI_Report ("httpTask:发送失败、错误代码=%d。"、ret);
#endif
         退货失败;
       }

HTTP_STATUS = HttpClient_sendRequest (https://ClientHandle、HTTP_METHOD_POST、POST_Request_URI、
                                status_buf、strlen (status_buf)、HttpClient_chunch_end);
     if (http_status < 0)
     {
#ifdef debug_post
       OSI_Report ("httpTask:发送失败、错误代码=%d。"、ret);
#endif
       退货失败;
     }

Len = 0;
     操作
     {
       RET = HttpClient_readResponseBody (httpClientHandle、data、sizeof (data)、&moreDataFlag);
       if (ret < 0)
       {
#ifdef debug_post
         OSI_Report ("httpTask:Response body processing failed"、ret);
#endif
         退货失败;
       }
#ifdef debug_post
//       OSI_Report ("%.*s \r\n"、ret、data);
#endif      
       if ((len+ret)<= sizeof (read_Response_Buffer))
       {
         MEM_COPY (READ_RESPONSE_Buffer+len、data、ret);
       }
       
       len += ret;
     }
     while (moreDataFlag);

RET = HttpClient_ddisconnect (httpClientHandle);
     if (ret < 0)
     {
#ifdef debug_post
       OSI_Report ("httpTask:断开连接失败"、ret);
#endif
       退货失败;
     }
     RET = HttpClient_Destroy (httpClientHandle);
     if (ret < 0)
     {
#ifdef debug_post
       OSI_Report ("销毁 http 客户端句柄失败、错误代码=%d.\r\n"、ret);
#endif
       退货失败;
     }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请尝试在每个 HttpClient_sendRequest 之后调用 HttpClient_readResponseBody。

    由于 simplelink 的存储器资源有限、等待响应可能会导致问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在每个 HttpClient_sendRequest,之后,我尝试调用 HttpClient_readResponseBody,但它没有效果。

    我在任务中删除了 HttpClient_create、HttpClient_setHeader、HttpClient_connect、HttpClient_ddisconnect、HttpClient_Destroy API 函数、它运行良好。但我不想始终连接服务器、最好的方法是在需要发布数据时、连接服务器时、数据需要发布时、断开服务器连接。 那么、我必须怎么做呢?

    for (;;)
       {
         OSI_SyncObjWait (&xBinary0、OSI_WAIT_FOREVE); //等待操作消息

    RET =HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_POST、POST_Request_URI、
                                "{\"传感器\":["、strlen ("{\"传感器\":[")、HttpClient_chunch_start);
         if (ret < 0)
         {
    #ifdef debug_post
           OSI_Report ("httpTask:发送失败、错误代码=%d。"、ret);
    #endif
           退货失败;
         }

    RET = HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_POST、POST_Request_URI、
                                  Post_Data_Buffer、strlen (Post_Data_Buffer)、HttpClient_Drop_Body);
           if (ret < 0)
           {
    #ifdef debug_post
             OSI_Report ("httpTask:发送失败、错误代码=%d。"、ret);
    #endif
             退货失败;
           }

    HTTP_STATUS = HttpClient_sendRequest (https://ClientHandle、HTTP_METHOD_POST、POST_Request_URI、
                                    status_buf、strlen (status_buf)、HttpClient_chunch_end);
         if (http_status < 0)
         {
    #ifdef debug_post
           OSI_Report ("httpTask:发送失败、错误代码=%d。"、ret);
    #endif
           退货失败;
         }

    Len = 0;
         操作
         {
           RET = HttpClient_readResponseBody (httpClientHandle、data、sizeof (data)、&moreDataFlag);
           if (ret < 0)
           {
    #ifdef debug_post
             OSI_Report ("httpTask:Response body processing failed"、ret);
    #endif
             退货失败;
           }
    #ifdef debug_post
    //       OSI_Report ("%.*s \r\n"、ret、data);
    #endif      
           if ((len+ret)<= sizeof (read_Response_Buffer))
           {
             MEM_COPY (READ_RESPONSE_Buffer+len、data、ret);
           }
           
           len += ret;
         }
         while (MoreDataFlag)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果您只是删除 create 和 destroy 方法、但在重复代码中保留 connect + disconnect、该怎么办?

    初始化和销毁只应调用一次、但动态连接和断开是合理的。

    BTW。 请求之间的间隔是多少(即等待操作消息的时间是多少?)