乐鑫技术交流
直播中

吴凡

10年用户 927经验值
擅长:48674
私信 关注
[问答]

使用ESP8266和TCP服务器通信,发送数据卡在ESPCONN_WRITE状态的原因?

使用ESP8266和TCP服务器通信,每隔一分钟会向服务器上报信息。但会遇到发送失败,连接状态卡在ESPCONN_WRITE。求大佬们帮忙分析一下。
日志1:
23:47:59 [2650550][DEBUG][NET]server_conn.state:ESPCONN_CONNECT(3)
23:47:59 [2651050][DEBUG][NET]tcp send:
23:48:04 [2655570][DEBUG][NET]server_conn.state:ESPCONN_WRITE(4)
23:48:09 [2660590][DEBUG][NET]server_conn.state:ESPCONN_WRITE(4)
23:48:14 [2665610][DEBUG][NET]server_conn.state:ESPCONN_WRITE(4)
23:48:19 [2670630][DEBUG][NET]server_conn.state:ESPCONN_WRITE(4)
23:48:24 [2675650][DEBUG][NET]server_conn.state:ESPCONN_WRITE(4)
23:48:25 [2677220][ERR][NET]connect err:-9!     /* Connection reset.        */
23:48:29 [2680670][DEBUG][NET]server_conn.state:ESPCONN_WAIT(1)
23:48:31 [2683360][ERR][NET]connect err:-11!   /* Not connected.           */
23:48:34 [2685690][DEBUG][NET]server_conn.state:ESPCONN_WAIT(1)
23:48:38 [2689760][ERR][NET]connect err:-11!
23:48:39 [2690710][DEBUG][NET]server_conn.state:ESPCONN_WAIT(1)
[2695240][INFO][NET]tcp connect success!
23:48:44 [2695730][DEBUG][NET]server_conn.state:ESPCONN_WRITE(4)
23:48:44 [2695950][DEBUG][NET][link79]tcp send success!
[2695950][DEBUG][NET]tcp recv(15)
[2695950][DEBUG][NET]data conn recv:
[2695950][INFO][PROTOCOL]get msg
23:48:49 [2700750][DEBUG][NET]server_conn.state:ESPCONN_CONNECT(3)

在一次发送中,持续了25秒,最终失败。最后触发重连回调
用的是NONOS SDK。但我翻过OSSDK的release note,没看到有关于修复这类网络问题的更新,所以应该是SDK版本关系不大。
请大佬帮忙看看。谢谢。
               

回帖(1)

李俊

2024-7-9 16:03:08
根据您提供的日志信息,您的ESP8266在与TCP服务器通信时,发送数据时卡在了ESPCONN_WRITE状态。这种情况可能是由多种原因导致的,以下是一些建议和可能的原因分析:

1. 网络延迟或不稳定:在与TCP服务器通信时,网络延迟或不稳定可能导致数据发送失败。请检查您的网络环境,确保网络连接稳定。

2. 数据包大小:ESP8266的TCP发送缓冲区有限,如果发送的数据包过大,可能会导致发送失败。请尝试减小发送的数据包大小,或者分批次发送数据。

3. TCP连接超时:TCP连接可能因为长时间没有数据传输而超时。请检查您的TCP服务器设置,确保连接超时时间足够长,以适应您的数据发送频率。

4. 服务器端问题:服务器端可能存在一些问题,导致无法正确接收或处理发送的数据。请检查服务器端的日志和配置,确保服务器端能够正常接收和处理数据。

5. ESP8266固件问题:您的ESP8266固件可能存在一些问题,导致发送数据时卡在ESPCONN_WRITE状态。请尝试升级到最新版本的固件,或者使用其他已知稳定的固件版本。

6. 代码逻辑问题:请检查您的代码逻辑,确保在发送数据之前,TCP连接已经建立并且处于连接状态。同时,确保在发送数据后,正确处理发送结果和异常情况。

7. 系统资源不足:ESP8266的系统资源有限,如果同时运行多个任务或处理大量数据,可能会导致系统资源不足,从而影响数据发送。请检查您的代码,确保合理分配系统资源。

8. 重传机制:TCP协议具有重传机制,如果发送的数据没有被服务器正确接收,ESP8266会自动重传数据。请检查您的代码,确保在重传机制生效时,能够正确处理重传数据。

综上所述,要解决这个问题,您需要从多个方面进行排查和优化。首先,检查网络环境和TCP服务器设置;其次,优化数据包大小和发送频率;然后,检查ESP8266固件和代码逻辑;最后,确保系统资源合理分配和正确处理重传机制。希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分