模块发送 TCP 数据失败

若模块正常建立 TCP 非透传客户端连接,但是发送 TCP 数据失败。可以参考以下方式排查解决(涉及到的 AT 命令,请参考功能 AT 指令集): 1. 确认是否是服务器问题。可通过更换服务器对比确认是否是服务器配置问题。 2. 确认 SIM 卡是否也有欠费。可联系运营商确认。 3. 确认是否是长时间没有发送数据导致的假连接。可通过缩短心跳周期或者是提高数据发送频率来确认。若缩短心跳周期或者是提高数据发送频率后,数据发送正常则可能是假连接引起的问题。 4. 确认 TCP 连接是否还存在。可通过”AT+IPSTATUS=<SocketID>”命令的返回值来确认。若返回值中含有“CONNECT”字符串,则表示 TCP 连接存在;若回“DISCONNECT” 字符串,则 表示 TCP 连接不存在。 5. 确认终端(或主控)是否已经将数据发送到模块。 可以通过模块串口与终端(或主控)串口之间交互的 AT 命令和数据内容来确认。为此,我司建议主控具备保存或打印模块与终端串口交互 log 功能。只要 AT+TCPSEND 命令返回“+TCPSEND: <SocketID>,<DataLength>”就表示主控数据已经发送到模块。 6. 确认模块底层协议栈是否收到服务器端 TCP 协议层的 ACK。可通过”AT+TCPACK=<SocketID>”命令的返回值来确认。若返回值中< data_sent >字段与<acked_recv>字段数值相同,则表示数据已经发送到服务器且服务器已经确认。若返回值中< data_sent >字段数值大于<acked_recv>字段数值,则有可能是数据没有发送到服务器,或者是服务器接收有延时还未收到数据,需要在服务器和模块同时抓取 TCP 层数据来排查,可以联系我司 FAE 跟进排查。