UDP Client 例程讲解#
例程位置#
开发板固件路径:
/sdcard/examples/14-Socket/udp_clinet.pySDK 源码路径:
src/canmv/resources/examples/14-Socket/udp_clinet.py
文件名中的 clinet 沿用当前固件和源码目录中的实际拼写。该例程把开发板作为 UDP
发送端,向电脑连续发送 10 个数据报。
运行前准备#
先在电脑上启动 UDP 调试工具并监听一个端口,再修改脚本中的网络参数和目标地址:
NETWORK_TYPE = "wifi_sta"
WLAN_DEVICE = "auto"
WIFI_SSID = "TEST"
WIFI_PASSWORD = "12345678"
NETWORK_TIMEOUT = 20
ai = socket.getaddrinfo("192.168.1.110", 8080)
把 192.168.1.110 改为电脑与开发板互通的 IP,把 8080 改为电脑端 UDP 监听
端口,并允许该 UDP 端口通过防火墙。
代码流程#
连接网络#
netif, _ = connect_network(...)
公共网络库等待接口取得 IP,并选择默认上行接口。
解析目标地址并创建 UDP Socket#
addr = socket.getaddrinfo("192.168.1.110", 8080)[0][-1]
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
SOCK_DGRAM 表示 UDP。它不需要像 TCP 那样先建立连接,每次发送时直接指定目标
地址。
发送 10 个数据报#
for i in range(10):
message = "K230 udp client send test {0} \r\n".format(i)
s.sendto(message, addr)
time.sleep(0.2)
每次 sendto() 对应一个独立 UDP 数据报,接收端能保留数据报边界。UDP 不保证
到达、顺序或去重;对可靠性有要求时需要应用层确认和重传。
关闭 Socket#
脚本发送完成后等待 1 秒,关闭 Socket 并打印 end。该例程只发送数据,没有调用
recvfrom(),因此不会读取服务端的回复。
运行与验证#
先启动电脑端 UDP 接收工具。
运行
/sdcard/examples/14-Socket/udp_clinet.py。电脑端应收到序号
0到9的 10 个数据报。若串口显示发送成功但电脑没有收到,重点检查目标 IP、UDP 端口、防火墙和 Wi-Fi 热点的客户端隔离设置。
