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

ESP8266组网通信问题:客户端发送'alarm'出现ECONNABORTED错误

ESP8266客户端发送消息报错[Errno 103] ECONNABORTED的解决方法

使用两块ESP8266,一块创建AP无线网络,另一块作为客户端连接后发送"alarm"消息。AP端代码运行正常,客户端能成功连网,但发送消息时始终触发[Errno 103] ECONNABORTED错误。两端代码如下:

AP端代码

import network
import socket
from machine import Pin
import time

# LED引脚定义
led_pin = Pin(0, Pin.OUT) 
led_pin.on() 
led_pin2 = Pin(2, Pin.OUT) 
led_pin2.off() 
time.sleep(2) 
led_pin.off() 
led_pin2.on()

# 关闭已激活的AP接口(如果存在)
ap = network.WLAN(network.AP_IF)  
ap.active(False)  

# 初始化新的AP接口并配置参数
ap = network.WLAN(network.AP_IF)  
ap.active(True)  
ap.config(essid="Active", password="")  

print("AP热点配置完成。AP的IP地址:", ap.ifconfig()[0])

# 接收消息函数
def odbierz_dane():
    print("等待客户端连接...")
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 初始化服务器套接字
    server_socket.bind(('0.0.0.0', 8080))  # 绑定IP和端口
    server_socket.listen(10)  # 监听连接请求
    print("服务器在8080端口监听")

    while True:
        conn, addr = server_socket.accept()  # 接受连接
        print('来自客户端的连接: %s' % str(addr))

        request = conn.recv(1024)  # 接收数据
        received_data = request.decode('utf-8')
        print('收到数据: %s' % received_data)

        if received_data == "alarm":
            print("需要帮助")
            led_pin.on()

        conn.close()  # 关闭连接

# 启动接收函数
print("启动数据接收函数...")
odbierz_dane()

客户端代码

import network
import socket
import time

# 发送告警消息函数
def wyslij_alarm():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    addr = ('192.168.4.1', 8080)  # AP端的IP和端口
    try:
        client_socket.connect(addr)  # 尝试连接AP端
    except OSError as e:
        print("连接服务器失败: %s" % str(e))
        return

    try:
        message = "alarm"
        client_socket.send(message.encode('utf-8'))  # 发送消息
        print("已发送消息: %s" % message)
    except Exception as e:
        print("发送消息失败: %s" % str(e))
    finally:
        client_socket.close()  # 关闭套接字

# 连接AP热点
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.connect("Active", "")  # AP的SSID和密码

while not sta.isconnected():
    time.sleep(1)

print("已连接到AP热点。客户端IP地址:", sta.ifconfig()[0])

# 发送"alarm"消息到AP端
wyslij_alarm()

错误原因及解决办法

错误原因

ECONNABORTED表示连接被AP端主动终止,核心问题是AP端在接收数据后立即关闭连接,而客户端的send操作可能还未完成网络传输,导致连接中断报错。

解决办法

方法1:AP端发送确认响应后再关闭连接

修改AP端odbierz_dane函数,在处理完数据后添加响应发送逻辑,确保客户端收到确认后再关闭连接:

# 在AP端的if判断后添加
conn.send("已接收消息".encode('utf-8'))
conn.close()

同时在客户端wyslij_alarm函数的send之后添加接收响应的代码:

# 发送消息后添加
response = client_socket.recv(1024)
print("服务器响应:", response.decode('utf-8'))

方法2:客户端发送后延时再关闭连接

修改客户端的finally块,增加短暂延时,给数据传输留出时间:

finally:
    time.sleep(0.1)  # 延时100毫秒确保数据发送完成
    client_socket.close()

方法3:验证AP端IP地址正确性

确保客户端代码中填写的AP端IP与AP端启动时打印的IP一致,部分场景下AP的IP可能不是默认的192.168.4.1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:44:56