0

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

服务器运行良好,我可以使用 Kitty 使用 RAW 连接(将我的 PC 连接到 ESP8266 AP)连接到它。相反,客户端在 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.")
4

1 回答 1

0

这个问题的愚蠢答案是我最终在板之间切换了程序,所以它们都使用“几乎”相同的(ESSID 和密码)接入点运行。尽管客户端已正确连接到服务器 AP,但我猜想某些 IP 冲突正在避免套接字连接。

于 2018-01-24T00:43:42.730 回答