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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:50:44