1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用ESP8266做client向HTTP sever发送post请求,发送一段时间之后,调用espconn_send就会返回ESPCONN_MEM,我是等上一包数据发完之后,进入了sent callback,然后再发下一包,我不知道tcp_PCB是在哪儿close和删除的,我尝试在disconnect callback和reconnect callback中调用espconn_delete或espconn_disconnect,都不行,不知道问题出在哪儿.
void ICACHE_FLASH_ATTR disconnect_callback(void *arg) { struct espconn *conn = (struct espconn *)arg; sint8 error = espconn_delete(conn); //sint8 error = espconn_disconnect(conn); if(conn == NULL) return; if(conn->proto.tcp != NULL) { os_free(conn->proto.tcp); conn->proto.tcp = NULL; } os_free(conn); user_conn = NULL; if(error != 0){ char str[30]; os_sprintf(str, " delete err: %d", error); uart0_sendStr(str); } } |
|
相关推荐
1个回答
|
|
ESP8266在发送HTTP POST请求时,出现ESPCONN_MEM错误的原因可能有以下几点:
1. 内存不足:ESP8266的内存有限,如果在发送大量数据或者频繁发送数据时,可能会导致内存不足。此时,可以尝试优化代码,减少内存占用,或者增加数据发送的间隔时间。 2. 连接超时:如果ESP8266与HTTP服务器之间的连接超时,也可能导致ESPCONN_MEM错误。可以尝试调整连接超时时间,或者检查网络连接是否稳定。 3. 连接未正确关闭:在使用ESP8266作为TCP客户端时,需要确保在数据发送完成后正确关闭连接。可以在sent callback中调用espconn_disconnect()来关闭连接。同时,需要在disconnect callback中释放相关资源。 4. 重连机制:如果在disconnect callback中尝试调用espconn_reconnect()进行重连,可能会导致TCP连接状态混乱。建议在reconnect callback中处理重连逻辑。 针对你的问题,可以尝试以下解决方案: 1. 确保在sent callback中调用espconn_disconnect()来关闭连接。 ```c void ICACHE_FLASH_ATTR sent_callback(void *arg) { struct espconn *conn = (struct espconn *)arg; espconn_disconnect(conn); } ``` 2. 在disconnect callback中释放相关资源,并确保连接已经关闭。 ```c void ICACHE_FLASH_ATTR disconnect_callback(void *arg) { struct espconn *conn = (struct espconn *)arg; espconn_abort(conn); // 释放连接资源 } ``` 3. 如果需要重连,可以在reconnect callback中处理重连逻辑。 ```c void ICACHE_FLASH_ATTR reconnect_callback(void *arg, sint8 err) { struct espconn *conn = (struct espconn *)arg; if (err == 0) { // 重连成功,可以重新发送数据 } else { // 重连失败,可以进行错误处理或者尝试重新连接 } } ``` 4. 检查网络连接是否稳定,以及连接超时时间是否合适。 5. 优化代码,减少内存占用,或者增加数据发送的间隔时间。 通过以上方法,应该可以解决ESP8266发送POST请求时出现的ESPCONN_MEM错误。如果问题仍然存在,请检查代码逻辑,确保TCP连接的建立、发送、关闭等操作都按照正确的顺序执行。 |
|
|
|
只有小组成员才能发言,加入小组>>
1140 浏览 1 评论
577浏览 6评论
478浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
462浏览 5评论
463浏览 4评论
438浏览 4评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 21:03 , Processed in 0.833695 second(s), Total 76, Slave 60 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号