TCP 客户端
UIFLOW2 应用示例
简单客户端
在 UiFlow2 中打开 cores3_tcp_client_example.m5f2 项目。
此示例创建了一个向服务器发送数据的 TCP 客户端。
UiFlow2 代码块:
示例输出:
None
MicroPython 应用示例
简单客户端
此示例创建了一个向服务器发送数据的 TCP 客户端。
MicroPython 代码块:
1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD 2# 3# SPDX-License-Identifier: MIT 4 5import os, sys, io 6import M5 7from M5 import * 8import socket 9import network 10import time 11 12 13title0 = None 14label0 = None 15label1 = None 16label2 = None 17label3 = None 18label4 = None 19label5 = None 20label6 = None 21label7 = None 22label8 = None 23label9 = None 24tcpc = None 25wlan = None 26 27 28count = None 29data = None 30 31 32def setup(): 33 global \ 34 title0, \ 35 label0, \ 36 label1, \ 37 label2, \ 38 label3, \ 39 label4, \ 40 label5, \ 41 label6, \ 42 label7, \ 43 label8, \ 44 label9, \ 45 tcpc, \ 46 wlan, \ 47 count, \ 48 data 49 50 M5.begin() 51 Widgets.fillScreen(0x222222) 52 title0 = Widgets.Title("TCP Client", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu24) 53 label0 = Widgets.Label("Local IP:", 4, 32, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 54 label1 = Widgets.Label("Server IP:", 4, 60, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 55 label2 = Widgets.Label("Server Port", 4, 88, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 56 label3 = Widgets.Label("Send:", 4, 118, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 57 label4 = Widgets.Label("Recv:", 4, 144, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 58 label5 = Widgets.Label("label5", 136, 32, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 59 label6 = Widgets.Label("label6", 136, 60, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 60 label7 = Widgets.Label("label7", 136, 88, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 61 label8 = Widgets.Label("label8", 136, 118, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 62 label9 = Widgets.Label("label9", 136, 144, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 63 64 wlan = network.WLAN(network.STA_IF) 65 wlan.active(True) 66 tcpc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 67 tcpc.connect(("192.168.8.236", 8001)) 68 count = 0 69 label5.setText(str(wlan.ifconfig()[0])) 70 label6.setText(str("192.168.8.137")) 71 label7.setText(str("8001")) 72 73 74def loop(): 75 global \ 76 title0, \ 77 label0, \ 78 label1, \ 79 label2, \ 80 label3, \ 81 label4, \ 82 label5, \ 83 label6, \ 84 label7, \ 85 label8, \ 86 label9, \ 87 tcpc, \ 88 wlan, \ 89 count, \ 90 data 91 tcpc.send(str(count)) 92 label8.setText(str(count)) 93 time.sleep_ms(100) 94 data = tcpc.recv(1024) 95 count = (count if isinstance(count, (int, float)) else 0) + 1 96 if not len(data): 97 pass 98 label9.setText(str(data)) 99 time.sleep(1) 100 M5.update() 101 102 103if __name__ == "__main__": 104 try: 105 setup() 106 while True: 107 loop() 108 except (Exception, KeyboardInterrupt) as e: 109 try: 110 from utility import print_error_msg 111 112 print_error_msg(e) 113 except ImportError: 114 print("please update to latest firmware")
示例输出:
None
API参考
- socket.socket()
- socket.connect(address)
创建一个套接字对象并连接到服务器。
- 参数:
address (tuple) – 包含服务器 IP 地址和端口号的元组。
- 返回:
一个套接字对象。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
import socket tcpc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcpc.connect(('192.168.8.236', 8001))
- socket.close()
关闭套接字连接。
UiFlow2 代码块:

MicroPython 代码块:
tcpc.close()
- socket.recv(bufsize)
从套接字接收数据。
UiFlow2 代码块:

MicroPython 代码块:
data = tcpc.recv(1024) print(data)
- socket.read()
从套接字读取数据。
- 返回:
接收到的数据。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
data = tcpc.read() print(data)
- socket.readline()
读取一行,以换行符结尾。
- 返回:
读到这一行。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
data = tcpc.readline() print(data)
- socket.send(data)
向套接字发送数据。该套接字必须连接到远程套接字。
UiFlow2 代码块:

MicroPython 代码块:
tcpc.send(b'Hello, World!') tcpc.send('Hello, World!')
- socket.write(data)
将字节缓冲区写入套接字。此函数将尝试将所有数据写入套接字(无“短写入”)。不过,对于非阻塞套接字,这可能无法实现,并且返回的值将小于 buf 的长度。
UiFlow2 代码块:

MicroPython 代码块:
tcpc.write(b'Hello, World!') tcpc.write('Hello, World!')
- socket.setblocking(flag)
设置套接字的阻塞或非阻塞模式:如果标志为假,则套接字设置为非阻塞,否则设置为阻塞模式。
此方法是某些 settimeout() 调用的简写:
sock.setblocking(True)等同于sock.settimeout(None)sock.setblocking(False)等同于sock.settimeout(0)
- param bool flag:
如果为 True,套接字将处于阻塞模式。如果为 False,套接字将处于非阻塞模式。
- return:
None
- rtype:
None
UiFlow2 代码块:

MicroPython 代码块:
tcpc.setblocking(True) tcpc.setblocking(False)
- socket.settimeout(timeout)
设置阻塞套接字操作的超时时间。值参数可以是表示秒数的非负浮点数,也可以是 None。如果给出了非零值,则在操作完成之前如果超时时间值已过,则后续套接字操作将引发 OSError 异常。如果给出了零,则套接字将处于非阻塞模式。如果给出了 None,则套接字将处于阻塞模式。
- 参数:
timeout (float) – 超时值(以秒为单位)。如果为 None,则套接字将处于阻塞模式。
- 返回:
None
- 返回类型:
None
UiFlow2 代码块:

MicroPython 代码块:
tcpc.settimeout(5) tcpc.settimeout(None)
