目录

如何解决TCPSocket发送数据报错"send failed, socket is 72, errno is 32"

问题现象

使用TCPSocket给打印机循环发送文件数据时中途报错:[socket_exec.cpp:2654] send failed, socket is 72, errno is 32,但是使用Debug方式一步一步的执行可以发送成功,如何解决?

背景知识

应用使用TCP协议进行Socket通信需要了解以下流程:

  1. import需要的Socket模块。
  2. 创建一个TCPSocket连接,返回一个TCPSocket对象。
  3. 订阅TCPSocket相关的订阅事件。
  4. 绑定IP地址和端口,端口可以指定或由系统随机分配。
  5. 连接到指定的IP地址和端口。
  6. 发送数据。
  7. Socket连接使用完毕后,主动关闭。

问题定位

分析结论

通过抓取TCPDump日志进行分析,关键日志如下:

结论如下:

修改建议

常见FAQ

Q:发送原始字节数组时报错"recv fail, errno: 0"如何处理?

A:该错误码表示服务器返回FIN主动关闭了连接。建议通过tcpdump抓包日志分析服务器关闭连接的具体原因,检查是否存在数据格式不匹配、发送频率过快或服务端处理超时等情况。