我一直在使用 ESP8266,并遇到了一个似乎不知从何而来且无法解决的问题。至少 - 对我来说。
基本上我继续使用this教程来构建一个简单的服务器套接字。 然而我的 esp 突然停止允许与其自身的连接。代码正常运行到
main.py
第23行:
while True:
conn, addr = s.accept()
并且只是停止工作或在 while 循环中继续前进。它只是卡在自己身上! 没有错误消息。至少
Thonny
没有显示任何内容。
有趣的是 - 有时它确实接受连接。使用所有相同的代码和硬件,也许可以尝试 100 次之一。
我尝试在 stackoverflow 上查找类似的失败,@Techtician 也有同样的问题,我相信尚未解决的问题。 (链接到他的帖子)
让我们尝试简化问题。
使用这个简单的回显客户端+服务器并报告结果。 请务必将
<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()
处于阻塞状态。这是一个功能,而不是一个错误。