工具/软件:TI-RTOS
环境:Windows 64、CCS 7.4、XDCtools 3.32.0.06、TI-RTOS 2.16.0.08
我已经为该板使用了 HttpGet 示例、并对其进行了修改以向服务器发布帖子。 每次运行时、我都会得到(在控制台上)"00065.500 TcpTimeoutRexmt:Retransmit Timeout (重新发送超时)"、但每次迭代的前导码都不同。 这并不是阻止帖子工作的原因、但由于有意外的输出、这让我感到担忧。 我找到了几篇相关论坛文章、建议它可能与堆栈大小相关、因此我增加了 httpTask 的堆栈、但它没有明显的效果或无法防止意外输出。 参考下面的代码片段和控制台日志、似乎请求和请求主体已成功传输(因为服务器接受并积极验证请求主体的内容)、 但由于存在重发送超时、我倾向于认为服务器不会及时发回确认(从而触发重发送)、或者 NDK/RTOS 未正确接收/解释其确认。 为了简洁起见、我只想发布看起来像相关代码的内容、但如果需要更多上下文、请告诉我。 目前、这是一个独立的项目、但当它与主 RTOS 项目集成时、这种重新传输引起的延迟可能会导致时序问题、因此我想将其插入到萌芽状态。 是否有人能够就如何解决这一问题提供一些见解和/或建议?
在 http 客户端已初始化并连接到服务器后:
while (1){
Semaphore_pend (https://BIOS_wait_forever);
RET = HTTPCLI_sendRequest (&CLI、HTTPStd_POST、Request_URI、false);
如果(ret < 0){
printError ("httpTask: send failed"、ret);
}
如果(ret =0){
System_printf ("HTTP POST 请求:成功\n");
system_flush();
}
RET = HTTPCLI_sendRequestBody (&CLI、(const char *)&sendBuf、strlen (sendBuf));// sizeof (sendBuf);
如果(ret < 0){
printError ("httpTask:发送请求正文失败"、ret);
//Task_sleep (1000);
}
如果(ret =0){
System_printf ("请求正文:已发送\n");
system_flush();
}
//}while (ret < 0);
RET = HTTPCLI_getResponseStatus (&CLI);
if (ret!= HTTPStd_OK && ret!= HTTPStd_no_content){
printError ("httpTask:响应状态不是200 (OK)或204 (no content)"、ret);
}
System_printf ("HTTP 响应状态代码:%d\n"、ret);
system_flush();
控制台输出:
HTTP POST 请求:成功
请求正文:已发送
00065.500 TcpTimeoutRexmt:重新发送超时
HTTP 响应状态代码:200
服务器响应类型:application/json;charset=UTF-8
服务器响应长度:216
"连接":保持活动
响应正文:
{"确认":"成功"。 //这是一个长响应,所以我截断了它