You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python通过TCP端口发送AT命令无响应问题排查求助

问题描述

我正在编写Python代码从TCP端口20001获取信息,根据文档说明,可调用若干AT命令(其中一个为+OK),且AT命令的结束位必须为0x0D。我参考示例代码编写了相关代码,能成功建立连接,但无法收到返回数据。我怀疑packet部分的构造存在问题,同时不确定是否需要在+OK前添加AT,此前从未接触过AT命令,相关示例较少。

补充:返回的连接信息如图所示

原代码:

TCP_IP = '127.0.0.1'
TCP_PORT = 20001
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
print('connected')
# won't work without encoding
packet = bytearray('x1b' + '+OK' + 'x1d', encoding='ascii')
s.send(packet)
s.shutdown(socket.SHUT_WR)
data = s.recv(BUFFER_SIZE)
print(data)
问题分析与修正
  • AT命令格式错误:标准AT命令必须以AT开头,文档中的+OK属于命令参数,正确的命令应该是AT+OK
  • 结束符完全错误:文档要求的0x0D是ASCII中的回车符(对应转义字符\r),你代码里的x1b是ESC(转义键)、x1d是GS(组分隔符),完全不符合要求
  • 过早关闭写通道:s.shutdown(socket.SHUT_WR)会立即关闭套接字的写端,可能导致对方还没完成响应就断开连接,应该在接收完数据后再关闭连接
  • 字节构造冗余:直接使用原生字节串更简洁可靠,不需要用bytearray配合ASCII编码
修正后的代码
import socket

TCP_IP = '127.0.0.1'
TCP_PORT = 20001
BUFFER_SIZE = 1024

# 创建并连接套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
print('connected')

# 构造正确的AT命令:AT开头+命令+回车结束符
packet = b'AT+OK\r'
s.send(packet)

# 接收返回数据
data = s.recv(BUFFER_SIZE)
print(data)

# 关闭连接
s.close()

内容的提问来源于stack exchange,提问作者ddd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:57:12