ESP8266 陷入了无限的 socket.accept() 循环,我猜?

问题描述 投票:0回答:1

我一直在使用 ESP8266,并遇到了一个似乎不知从何而来且无法解决的问题。至少 - 对我来说。

基本上我继续使用this教程来构建一个简单的服务器套接字。 然而我的 esp 突然停止允许与其自身的连接。代码正常运行到

main.py
第23行:

while True:
    conn, addr = s.accept()

并且只是停止工作或在 while 循环中继续前进。它只是卡在自己身上! 没有错误消息。至少

Thonny
没有显示任何内容。

有趣的是 - 有时它确实接受连接。使用所有相同的代码和硬件,也许可以尝试 100 次之一。

我尝试在 stackoverflow 上查找类似的失败,@Techtician 也有同样的问题,我相信尚未解决的问题。 (链接到他的帖子

python sockets esp8266 micropython
1个回答
0
投票

让我们尝试简化问题。

使用这个简单的回显客户端+服务器并报告结果。 请务必将

<CONTROLLER_IP>
替换为控制器的 IP 地址。

服务器应该在控制器上运行, 客户端 - 在您的电脑上。

服务器:

import socket
HOST = '0.0.0.0'
PORT = 5000

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        while True:
            data = conn.recv(1024)
            conn.sendall(data.decode().upper().encode())

客户:

import socket

HOST = '<CONTROLLER_IP>'
PORT = 5000

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    print("Connected")
    while True:
        msg = input("Type Message:") # type some text and hit enter
        s.sendall(msg.encode())
        data = s.recv(1024)
        print('GOT: ', data.decode())

在运行客户端之前运行服务器至关重要, 否则客户端的连接尝试肯定会失败。

正如 vpfb 提到的,创建了一个 TCP 连接。 在创建连接之前,

s.accept()
处于阻塞状态。这是一个功能,而不是一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.