ESP32笔记(2)TCP通信入门之ESP做服务端与客户端通信

    科技2024-04-20  16

    ESP32笔记(2)TCP通信入门之ESP做服务端与客户端通信

    需求

    编写代码完成esp32上的tcp服务端,能够为tcp客户端提供eco服务: (1)能够把客户端发送回来的字符串回发给客户端; (2)当客户端发送来“quit”时,结束会话,等待下一次accept.

    结合这篇可以更好的理解:TCP通信入门之ESP做客户端与服务端通信

    代码

    ## 需求 1. 编写代码完成esp32上的tcp服务端,能够为tcp客户端提供eco服务: (1)能够把客户端发送回来的字符串回发给客户端; (2)当客户端发送来“quit”时,结束会话,等待下一次accept. ## 代码及注释 结合这篇可以更好的理解:[TCP通信入门之ESP做客户端与服务端通信](https://blog.csdn.net/weixin_43493559/article/details/108882907) ​```python import network import socket import time SSID = "xlu" PASSWORD = "111222333" port = 8085 wlan = None listenSocket = None flag = False # 用来标志是否发送接受 def connectWifi(ssid, passwd): global wlan wlan = network.WLAN(network.STA_IF) # 创建一个广域网对象 wlan.active(True) # 允许访问网络 wlan.disconnect() # 关闭连上的最后一个wifi wlan.connect(ssid, passwd) # 连接wifi while (wlan.ifconfig()[0] == '0.0.0.0'): # 等待获取到ip,如果一直是0.0.0.0就是没获取到 time.sleep(1) return True try: connectWifi(SSID, PASSWORD) ip = wlan.ifconfig()[0] # 得到ip地址 listenSocket = socket.socket() # 创建套接字 listenSocket.bind((ip, port)) # 绑定ip和端口 listenSocket.listen(1) # 使能监听 listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 设置给定套接字选项的值 print('tcp waiting...') while True: print("accepting.....") conn, addr = listenSocket.accept() # 接受连接,conn是一个新的套接字对象 print(addr, "connected") conn.send("hello xlu,this is tcp server") conn.send("send quit to close, send accept to close") while True: data = conn.recv(1024) # 每次接收1024个字节 if (len(data) == 0): print("close socket") conn.close() # 如果没有数据就关闭 break data = data.decode('utf-8') if flag: ret = conn.send(data) # 发送数据 if data == 'quit\n': print("stop") flag = False if data == "accept\n": print("start") flag = True print(data) except: if (listenSocket): listenSocket.close() wlan.disconnect() wlan.active(False) ​```

    结果

    Processed: 0.024, SQL: 8