UDP 服务端
UIFLOW2 应用示例
回显服务器
在 UiFlow2 中打开 cores3_udp_server_example.m5f2 项目。
此示例创建一个回显接收数据的 UDP 服务器。
UiFlow2 代码块:
示例输出:
None
MicroPython 应用示例
回显服务器
此示例创建一个回显接收数据的 UDP 服务器。
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 network 9import socket 10 11 12title0 = None 13label0 = None 14label1 = None 15label2 = None 16label3 = None 17label4 = None 18label5 = None 19label6 = None 20label7 = None 21label8 = None 22label9 = None 23wlan = None 24udps = None 25 26 27recv_data = None 28 29 30def setup(): 31 global \ 32 title0, \ 33 label0, \ 34 label1, \ 35 label2, \ 36 label3, \ 37 label4, \ 38 label5, \ 39 label6, \ 40 label7, \ 41 label8, \ 42 label9, \ 43 wlan, \ 44 udps, \ 45 recv_data 46 47 M5.begin() 48 Widgets.fillScreen(0x222222) 49 title0 = Widgets.Title("UDP Server", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu24) 50 label0 = Widgets.Label("Local IP:", 4, 32, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 51 label1 = Widgets.Label("Local Port:", 4, 60, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 52 label2 = Widgets.Label("Remote IP:", 4, 88, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 53 label3 = Widgets.Label("Remote Port:", 4, 116, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 54 label4 = Widgets.Label("Recv Data:", 4, 144, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 55 label5 = Widgets.Label("label5", 136, 32, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 56 label6 = Widgets.Label("label6", 136, 60, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 57 label7 = Widgets.Label("label7", 136, 88, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 58 label8 = Widgets.Label("label8", 136, 116, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 59 label9 = Widgets.Label("label9", 136, 144, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18) 60 61 wlan = network.WLAN(network.STA_IF) 62 wlan.active(True) 63 udps = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 64 udps.bind(("0.0.0.0", 8000)) 65 udps.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 66 label5.setText(str(wlan.ifconfig()[0])) 67 label6.setText(str("8000")) 68 69 70def loop(): 71 global \ 72 title0, \ 73 label0, \ 74 label1, \ 75 label2, \ 76 label3, \ 77 label4, \ 78 label5, \ 79 label6, \ 80 label7, \ 81 label8, \ 82 label9, \ 83 wlan, \ 84 udps, \ 85 recv_data 86 M5.update() 87 recv_data = udps.recvfrom(1024) 88 label7.setText(str(recv_data[1][0])) 89 label8.setText(str(recv_data[1][1])) 90 label9.setText(str(recv_data[0])) 91 udps.sendto(recv_data[0], recv_data[1]) 92 93 94if __name__ == "__main__": 95 try: 96 setup() 97 while True: 98 loop() 99 except (Exception, KeyboardInterrupt) as e: 100 try: 101 from utility import print_error_msg 102 103 print_error_msg(e) 104 except ImportError: 105 print("please update to latest firmware")
示例输出:
None
API参考
- socket.socket()
- socket.bind(address)
创建一个套接字对象并将其绑定到一个地址。
- 参数:
address (tuple) – 包含服务器 IP 地址和端口号的元组。
- 返回:
一个套接字对象。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
import socket udps = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udps.bind(('0.0.0.0', 8000))
- socket.close()
关闭套接字连接。
UiFlow2 代码块:

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

MicroPython 代码块:
data = udps.recv(1024) print(data)
- socket.recvfrom(bufsize)
从套接字接收数据。返回值是一对 (bytes, address),其中 bytes 是表示接收数据的字节对象,address 是发送数据的套接字的地址。
UiFlow2 代码块:

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

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

MicroPython 代码块:
udps.send(b'Hello, World!') udps.send('Hello, World!')
- socket.sendto(data, address)
将数据发送到套接字。套接字不应连接到远程套接字,因为目标套接字由地址指定。
UiFlow2 代码块:

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

MicroPython 代码块:
udps.write(b'Hello, World!') udps.write('Hello, World!')
- socket.setsockopt(level, optname, value)
设置给定套接字选项的值。所需的符号常量在套接字模块中定义(SO_* 等)。该值可以是整数或表示缓冲区的字节类对象。
UiFlow2 代码块:

MicroPython 代码块:
udps.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 0) udps.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
