ESP8266客户端连接ESP32服务器出现ECONNABORTED 103错误求助
ESP32与ESP8266 MicroPython Socket连接ECONNABORTED 103错误排查
我正尝试使用MicroPython通过socket连接ESP32与ESP8266,但ESP8266客户端连接ESP32服务器时总会抛出ECONNABORTED 103错误。此前用笔记本测试该逻辑无问题,现将两段代码附上,求助排查问题。
ESP32服务器代码
import network import socket from time import sleep SSID = 'esp' KEY = 'meow' ADDR = '192.168.4.1' PORT = 2000 class socket_master: def __init__(self): self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.bind(('',PORT)) self.attempt = 0 def accept_connection(self): self.sock.listen(4) self.conn, self.addr = self.sock.accept() def test_speed(self): data = 'attempt ' + str(self.attempt) self.conn.sendall(data.encode()) self.attempt += 1 attempt = 0 try: print('starting network') ap = network.WLAN(network.AP_IF) print('network started') if ap.active() == False: ap.active(True) sleep(1) ap.config(essid='esp') print(ap.config('essid')) print('set ssid') print(ap.ifconfig()) except: print('failed') sm = socket_master() sm.accept_connection() print('waiting for client') while True: sm.test_speed()
ESP8266客户端代码
# main.py -- put your code here! import network import socket SSID = 'esp' KEY = 'meow' ADDR = '192.168.4.1' PORT = 2000 def do_connect(): wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect('esp') while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) class socket_master_2: def __init__(self): self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((ADDR,PORT)) def receive_print(self): data = self.sock.recv(1024) print(data) print(data.decode()) do_connect() client = socket_master_2() while True: client.receive_print()
排查方向
- AP密码配置缺失:ESP32的AP模式代码仅设置了ESSID,未配置密码,但客户端代码指定了
KEY='meow'。需在ESP32的AP配置中补充密码:ap.config(essid='esp', password='meow'),否则ESP8266会因连接参数不匹配导致网络异常。 - 客户端连接参数错误:ESP8266的
do_connect函数中,wlan.connect('esp')未传入密码参数,应改为wlan.connect(SSID, KEY),否则可能无法正常连接到AP,后续socket连接自然失败。 - 服务器打印时机颠倒:ESP32代码中
sm.accept_connection()执行后才打印"waiting for client",这行日志应移到sm.accept_connection()之前,才能准确确认服务器是否进入等待连接状态。 - 高频发送导致缓冲区溢出:服务器在连接建立后立即进入无限循环发送数据,可能导致ESP8266接收缓冲区溢出触发连接终止,可在
sm.test_speed()中添加sleep(1)降低发送频率。 - 缺少异常捕获机制:两端代码均未对socket操作添加异常捕获,比如客户端
recv时连接断开、服务器sendall时客户端离线都会直接报错,添加try-except块可以定位具体错误节点。
内容的提问来源于stack exchange,提问作者broke student
相关产品推荐
相关产品推荐

