EasyUDPClient

EasyUDPClient 提供了一种以事件驱动方式创建 UDP 客户端的简单方法。

UiFlow2 示例

简单客户端

在 UiFlow2 中打开 udp_client_core2_example.m5f2 项目。

本示例创建一个 UDP 客户端,该客户端连接到服务器并发送数据。

UiFlow2 代码块:

udp_client_core2_example.png

示例输出:

None

MicroPython 示例

简单客户端

本示例创建一个 UDP 客户端,该客户端连接到服务器并发送数据。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from easysocket import EasyUDPClient
 9import network
10import time
11
12
13title0 = None
14label2 = None
15label0 = None
16label1 = None
17wlan_sta = None
18udpc_0 = None
19
20
21import random
22
23received_data = None
24client_address_port = None
25
26
27def udpc_0_received_event(args):
28    global title0, label2, label0, label1, wlan_sta, udpc_0, received_data, client_address_port
29    client, client_address_port, received_data = args
30    label1.setText(str("Receive Msg:"))
31    label2.setText(str((str(received_data) + str(client_address_port))))
32
33
34def setup():
35    global title0, label2, label0, label1, wlan_sta, udpc_0, received_data, client_address_port
36
37    M5.begin()
38    Widgets.setRotation(1)
39    Widgets.fillScreen(0x222222)
40    title0 = Widgets.Title(
41        "UDPClient Core2 Example", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18
42    )
43    label2 = Widgets.Label("", 2, 156, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
44    label0 = Widgets.Label("Local IP:", 2, 77, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
45    label1 = Widgets.Label("Receive Msg:", 1, 122, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
46
47    wlan_sta = network.WLAN(network.STA_IF)
48    wlan_sta.active(True)
49    print("wait network connecting")
50    while not (wlan_sta.isconnected()):
51        print(".")
52        time.sleep(1)
53    print("connect success")
54    print(wlan_sta.ifconfig()[0])
55    label0.setText(str((str("Local IP:") + str((wlan_sta.ifconfig()[0])))))
56    udpc_0 = EasyUDPClient(
57        "Please enter the UDP server IP address.", 8000, EasyUDPClient.MODE_UNICAST
58    )
59    udpc_0.on_data_received(udpc_0_received_event)
60
61
62def loop():
63    global title0, label2, label0, label1, wlan_sta, udpc_0, received_data, client_address_port
64    M5.update()
65    udpc_0.check_event(timeout=1)
66    if BtnA.wasPressed():
67        udpc_0.send(str((random.randint(1, 100))))
68
69
70if __name__ == "__main__":
71    try:
72        setup()
73        while True:
74            loop()
75    except (Exception, KeyboardInterrupt) as e:
76        try:
77            from utility import print_error_msg
78
79            print_error_msg(e)
80        except ImportError:
81            print("please update to latest firmware")

示例输出:

None

API参考

class software.easysocket.udp_client.EasyUDPClient(remote_host, remote_port, mode=0)

基类:object

创建一个 EasyUDPClient 对象。

参数:
  • remote_host (str) – 远程主机地址。

  • remote_port (int) – 远程端口号。

  • mode (int) – UDP模式(单播、广播、组播)。默认为单播。

备注

对象创建时,连接会在后台启动。

备注

这个类是非阻塞式的,并且是事件驱动的。你需要定期调用 check_event() 来处理事件。

UiFlow2 代码块:

init.png

MicroPython 代码块:

from easysocket import EasyUDPClient

udp_client = EasyUDPClient("192.168.1.100", 8080, mode=EasyUDPClient.MODE_UNICAST)
connect()

连接到远程服务器。

MicroPython 代码块:

udp_client.connect()
on_data_received(callback)

设置数据接收事件的回调函数。

参数:

callback – 回调函数。

UiFlow2 代码块:

received_callback.png

MicroPython 代码块:

def on_data_received_cb(client, data):
    print("Received:", data)

udp_client.on_data_received(on_data_received_cb)
check_event(timeout=-1)

检查事件。

参数:

timeout (int) – 超时时间,单位为毫秒。默认值为 -1(无超时)。

UiFlow2 代码块:

check_event.png

MicroPython 代码块:

udp_client.check_event()
send(data)

向远程服务器发送数据。

参数:

data (bytes) – 要发送的数据。

返回:

已发送的字节数。

UiFlow2 代码块:

send.png

MicroPython 代码块:

udp_client.send(b"Hello")
sendto(data, address=None)

向远程服务器发送数据。

参数:
  • data (bytes) – 要发送的数据。

  • address (tuple) – 要发送数据的(主机,端口)元组。

返回:

已发送的字节数。

UiFlow2 代码块:

sendto.png

sendto2.png

MicroPython 代码块:

udp_client.sendto(b"Hello", ("192.168.1.100", 8080))
close()

关闭套接字连接。

UiFlow2 代码块:

close.png

MicroPython 代码块:

udp_client.close()
getsockname(*args, **kwargs)

返回套接字自身的地址。

返回:

套接字自身的地址。格式为(主机,端口)。

返回类型:

tuple

UiFlow2 代码块:

getsockname.png

MicroPython 代码块:

# get local ip address
client_socket.getsockname()[0]
getpeername(*args, **kwargs)

返回套接字所连接的远程地址。

返回:

远程地址。格式为(主机,端口)。

返回类型:

tuple

UiFlow2 代码块:

getpeername.png

MicroPython 代码块:

# get remote ip address
client_socket.getpeername()[0]