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.

[参考译文] LAUNCHCC3235MOD:器件在 http 发布期间使用500KB 的数据停止响应

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1219334/launchcc3235mod-device-stops-responding-during-http-post-with-500-kb-of-data

器件型号:LAUNCHCC3235MOD

您好!

我使用的是 CC3235 LaunchPad 和 SDK 6.10版 TI-RTOS http 客户端库。

当我发布500KB 的数据时、器件停止响应。

#define post_data        "288-133-87-240-244-92......... "  (500kb)

 

RET = HttpClient_sendRequest (httpClientHandle、HTTP_METHOD_POST、Request_URI
post_data、strlen (post_data)、
0);

我是否需要增加任何堆栈或堆内存?

此致、

罗伯特

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

    尊敬的 Robert:

    我强烈反对这种规模的员额。 500KB 容量太大了、似乎由于您要传输的数据大小而崩溃。 那么我首先建议您发送小得多的数据。 或者、您可以将数据分解为按顺序发送、如以下帖子中所示: e2e.ti.com/.../post-using-httpclient_sendrequest-getting-stuck-for-larger-body-length

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

    您好、Sabeeh:

    感谢您的链接。 我有同样的问题。 我修改了库中的 httpclient.c 代码、如下所示、但当我执行时、它不会反映在输出中。

    我是否错过了任何步骤?

    此致、

    罗伯特

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

    尊敬的 Robert:

    我不明白、输出中没有反映什么? 是否会得到错误值?

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

    您好、Sabeeh:

    我已经遵循线程并修复了编译器问题。   

    https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1209559/cc3235modsf-making-http-header-larger?tisearch=e2e-sitesearch&keymatch=change%2525252525252520http%2525252525252520client%2525252525252520library#

    uint32_t len;


    while (bytesToSend!= 0)
    {
      if (bytesToSend > 18000)
      {
        长度= 18000;
      }
      否则
      {
       len = bytesToSend;
      }

      REt = SlNetSock_send (cli->ssock、bodyPtr、len、0);
      如果(ret < 0)
      {
       返回(RET);
      }
    bytesToSend-=ret;
    bodyPtr+=ret;

    上述逻辑最多运行65,536字节。 之后、Web 服务器将接收文本、以一些垃圾数据结尾、如下所示。  

    ,492,561,514,546ym Aqymݵym ݵym Ω}AQ

    是否可以 调试  SlNetSock_send 函数?

    请提供建议?

    此致、

    罗伯特

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

    缓冲器似乎溢出、

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

    您好、Sabeeh:

    谢谢你的答复。

    能否增加缓冲器?

    您对此问题是否有任何其他权变措施?

    就是使用这个 WiFi 模块的限制。

    此致、

    罗伯特

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

    尊敬的 Robert:

    不存在此类限制。 您应该使用调试器来确定发生缓冲区溢出的位置。

    您能否提供 CCS 中内存分配工具的详细屏幕截图?

    BWT... 使用您正在使用的宏命令将静态数据存储在.const 段内尤其不是最好的方式。 因为根据所使用的编译器和优化级别可以产生非常不同的结果。 define 是一个预处理程序关键字、甚至可能发生以下情况:

    HTTPClient_sendRequest(httpClientHandle,HTTP_METHOD_POST, REQUEST_URI,  "288-133-87-240-244-92........." , strlen( "288-133-87-240-244-92........." ),

    ... 您的定义将在常量部分分配2x500kB (这不是具有1024KB 闪存的器件的最佳做法)

    1月

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

    大家好、Jan、

    感谢您的输入。 请查看我的内存分配详细信息

    我使用默认设置。 请提供建议。

    此致、

    罗伯特

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

    尊敬的 Robert:

    从存储器分配工具可以明显看出、您的编译代码不包含500kB 的数据(您的.const 段只有7kB)。 这意味着它不能包含并发送您的500kB 字符串。 我认为您使用500kB define post_data 的语法是如此奇怪、以至于编译器无法正确理解这一点。 您可能应该使用 const char 来代替宏。 这是将如此大的数据保存到常量内部代码中的正确方法。

    1月

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

    大家好、Jan、

    感谢您的输入。 我已经声明了本地 常量字符变量、并且 能够成功地将大数据传输到云。

    现在我 想 修改数据。 我在下面使用了 c 命令、但它无法正常工作。

    strcpy、strcat、 snprintf、memcpy  

    你有什么建议吗?

    此致、

    罗伯特

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

    尊敬的 Robert:

    你不能在运行时轻易地修改 const char 变量、这是因为它被放置在执行存储器中(MCU 内的闪存存储器)。 能够在需要放置在 RAM 中时修改变量。 由于 CC3235具有256kB RAM、因此将不适合所有500kB 的数据。 您需要按块构建数据。

    1月

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

    大家好、Jan、

    非常感谢您的回答。

    现在、我已经将该字符串转换成512字节的块。 但是、它仍然仅发送前512个字节。

    我的目标是将300KB 的数据传输成512字节的块。

    为了简化该问题、我采用了1024字节的数据并将其作为512字节的数据发送。 因此、我执行了 SlNetSock_send 函数两次。

    我看到第一次执行完成后、连接会自动关闭。

    len = strlen (bodyPtr);
    strcpy (newdata、bodyPtr);

    REt = SlNetSock_send (cli->ssock、bodyPtr、len、0);
    如果(ret < 0)
    {
    返回(RET);


    len = strlen (newdata);
    REt = SlNetSock_send (cli->ssock、newdata、len、0);

    如果(ret < 0)
    {
    返回(RET);

    请提供建议。

    此致、

    罗伯特

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

    尊敬的 Robert:

    在首次调用套接字发送 API 后没有理由关闭套接字。 可能是插槽在对侧闭合。 谁知道...

    您应该使用网络监听器(Wireshark、tcpdump 等)来确定正在进行什么操作。

    1月

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

    大家好、Jan、

    请找到我的 Wireshark 捕获文件。

    设备 IP:192.168.0.98

    网络服务器 IP:52.235.253.98

    请告诉我该设备是否发送所有数据。


    e2e.ti.com/.../LAPN600_5F00_PACKET_5F00_V1.1.00.002_5F00_202305152015.zip

    此致、

    罗伯特

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

    尊敬的 Robert:

    您的 TCP 通信(数据包编号 64 - 104)是由 TLS 1.2加密从这个原因,我不能看到确切的数据在那里。 您的设备中大约有2050个字节的加密数据(http 标头+用户数据、如果使用 HTTP 协议)。

    1月

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

    大家好、Jan、

    这是我的错。 我传递了错误的内容长度。 它的工作真棒。

    感谢您的支持。

    此致、

    罗伯特