前提
要保证服务端和客户端设备均在同一个网络下!
ESP32-S3上搭建TCP服务器
执行以下代码。
import network
import usocket
SSID = 'xxxx' # WiFi名称
PASSWORD = 'xxxx' # WiFi密码
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect(SSID, PASSWORD)
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
def start_server():
s = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
s.bind(('', 12345)) # 绑定到端口
s.listen(1) # 开始监听,最多允许一个连接排队等待
print('Server started on port 12345...')
while True:
conn, addr = s.accept() # 接受一个新连接
print('Connected by', addr)
data = 'xxxx' # 要发送的数据
conn.send(data.encode('utf-8')) # 发送数据
conn.close() # 关闭连接
start_server()
*print(‘network config:’, wlan.ifconfig())*所打印出来的信息是服务器的IP、子网掩码等信息。
12345是端口号(可改,不要与其他端口号冲突)
客户端接收
import socket
class Client:
def __init__(self, host='0.0.0.0', port=12345):
self.host = host
self.port = port
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
self.client_socket.connect((self.host, self.port))
def read(self) -> str:
# 接收服务器发送的数据
data = self.client_socket.recv(1024).decode('utf-8')
if data:
return data
else:
return "None"
def write(self, data: str):
# 向服务器发送数据
self.client_socket.sendall(data.encode('utf-8'))
def close(self):
# 关闭客户端socket
self.client_socket.close()
if __name__ == "__main__":
client = Client(host='0.0.0.0', port=8000)
# 向服务器发送消息
# client.write("Hello, server!")
# 接收并打印服务器响应的消息
response = client.read()
print("Received from server:", response)
# 关闭客户端连接
client.close()
客户端这里的IP地址(host)和端口号(port)均要和服务器上的保持一致