插座错误ECONNABORTED连接两个MicroPython板

时间:2018-01-20 15:45:35

标签: python sockets esp8266 micropython

我正在使用带有两个NodeMCU ESP8266开发板的MicroPython。我的目标是将一个连接到另一个,这样他们就可以交换信息。其中一个主板正在运行服务器程序,其AP已启动。另一个连接到另一个主板的AP并尝试连接。

服务器运行正常,我可以使用RAW连接(将我的PC连接到ESP8266 AP)与Kitty连接。相反,客户端在socket.connect()中失败并抛出ECONNABORTED异常。我已经使用了不同的设置,但它们似乎都没有用。我如何连接我的两块板?我是套接字的新手,所以这可能不是MicroPython特有的问题,而是Python的问题。

编辑:使用相同的代码从PC连接时没有问题。问题似乎不包括通过服务器访问点连接到服务器ESP8266的客户端ESP8266。也许是MicroPython的错误?

服务器代码:

import network
import socket

def runServer():
    try:
        ap_if = network.WLAN(network.AP_IF)
        ap_if.active(True)
        ap_if.config(essid='MicroPy-AP', password='micropythoN')

        s = socket.socket()
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        s.bind( ('', 8266) )
        s.listen(1)
        print("Waiting for a client...")
        client, client_ip = s.accept()
        print("Connected!")
    finally:
        print("Closing socket...", end=' ')
        s.close()
        print("Done.")

客户代码:

import network
import socket

def runClient():
    try:    
        sta_if = network.WLAN(network.STA_IF)
        sta_if.active(True)
        sta_if.connect('MicroPy-AP', 'micropythoN')
        while not sta_if.isconnected():
            pass
        sta_if.ifconfig()

        s = socket.socket()
        s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        print("Connecting...")
        s.connect( ('192.168.4.1', 8266) )
    finally:
        print("Closing socket...", end=' ')
        s.close()
        print("Done.")

1 个答案:

答案 0 :(得分:0)

这个问题的愚蠢答案是,我最终切换了电路板之间的程序,因此它们都运行着“差不多”的问题。相同(ESSID和密码)接入点。虽然客户端已正确连接到服务器AP,但我猜有些IP冲突正在避免套接字连接。