MicroPython Socket TCP链接记录 ESP8266
用于公司设备环境监控物联网验证,ESP32应该足够了
Server端
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2021/3/25 10:26
# @Author : Link
# @Site : 服务端
# @File : socket_server.py
# @Software: PyCharm
from socketserver import BaseRequestHandler, ThreadingTCPServer
class Handler(BaseRequestHandler):
# 启动一个链接
def handle(self) -> None:
address, pid = self.client_address
print("%s connected! pid: %s" % (address, pid))
while True:
try:
data = self.request.recv(1024)
if not data: break
print('->pid:%s say client:%s' % (pid, data))
self.request.send(data.upper())
except ConnectionError:
print('->pid:%s close connect' % (pid))
break
print("request close\n")
self.request.close()
if __name__ == '__main__':
server = ThreadingTCPServer(('0.0.0.0', 8080), Handler)
server.serve_forever() # 链接循环
Client端
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2021/3/26 15:56
# @Author : Link
# @Site : 客户端
# @File : socket_client.py
# @Software: PyCharm
import socket
import asyncio
clients = [socket.socket(socket.AF_INET, socket.SOCK_STREAM) for _ in range(10)]
for client in clients:
client.connect(('127.0.0.1', 8080))
async def client_connect_server(client, i):
i = 0
while True:
i += 1
if i == 20:
break
client.send(f'hello{i}'.encode('utf-8'))
print(client.recv(1024).decode("utf-8"))
await asyncio.sleep(.5)
client.close()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
tasks = [client_connect_server(client=client, i=index) for index, client in enumerate(clients)]
loop.run_until_complete(asyncio.wait(tasks))
MicroPython端
# socket
import usocket
import network
from time import sleep
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
print("connect wifi network...")
sta_if.connect("Link", "88888888")
def socket_connect():
s = usocket.socket(usocket.AF_INET,usocket.SOCK_STREAM)
s.connect(("172.18.17.100",8080))
i = 0
while True:
i = i + 1
if i == 10:
print("socket connect close")
s.close()
break
s.send("micropython\n")
print(s.recv(64).decode()) # 如果不取出tcp buff 就会提示LmacRxBlk:1
sleep(.1)
while True:
if sta_if.isconnected():
print("connect wifi network ok")
socket_connect()
break
else:
print("connect wifi network fail")
sleep(1)