UDP 辅助函数
UDP 辅助函数为脚本提供便捷的 Lua API,用于发送 UDP 数据报。这些函数处理目标地址、元数据创建和消息调度。
API 参考
udp_send(destination_address, destination_port, payload, delay, connection_id) → boolean
向指定的目标地址和端口发送 UDP 数据报。
参数:
destination_address(string) - 目标 IP 地址或主机名(必需,不能为 nil 或空字符串)destination_port(number) - 目标 UDP 端口号(必需,范围 1-65535)payload(string) - 数据报有效载荷,作为二进制字符串(可为空)delay(number) - 发送前的延迟,单位毫秒connection_id(number,可选) - 目标连接 ID(默认值:0)
返回值:
true- 数据报成功调度false- 调度失败(通道关闭或出错)- Error - 如果 destination_address 为 nil/空 或 destination_port 无效
重要说明:
- 目标地址必需:UDP 传输需要为每条消息明确指定目标地址。与面向连接的协议不同,UDP 没有默认目标地址。
- 二进制数据:有效载荷被视为原始二进制数据,支持任何字节值,包括空字节。
- 端口验证:端口 0 无效,将引发错误。
示例:
-- 向 UDP 服务器发送简单文本消息
udp_send("192.168.1.100", 8888, "Hello UDP", 0)
-- 延迟 200ms 后发送到特定连接
udp_send("localhost", 9000, "Delayed message", 200, 1)
-- 发送二进制数据
local binary_payload = string.char(0xFF, 0x00, 0xAB, 0xCD)
udp_send("10.0.0.50", 5000, binary_payload, 0)
-- 发送空数据报(保活信号)
udp_send("192.168.1.1", 12345, "", 0)
-- 向主机名发送
udp_send("iot.example.com", 8080, "sensor_data", 0)
用例
周期性传感器广播:
function on_timer(elapsed_ms)
if elapsed_ms % 5000 == 0 then -- 每 5 秒
local sensor_data = string.format("temp:%.1f,humidity:%.1f", 23.5, 65.2)
udp_send("192.168.1.100", 9000, sensor_data, 0)
end
end
协议网关:
function on_receive()
-- 将串行数据转发到 UDP 服务器
local payload = message.payload
udp_send("10.0.0.10", 5555, payload, 0)
return false
end
多目标广播:
function on_send()
-- 广播到多个 UDP 目标
local servers = {
{addr = "192.168.1.10", port = 8000},
{addr = "192.168.1.20", port = 8000},
{addr = "192.168.1.30", port = 8000}
}
for _, server in ipairs(servers) do
udp_send(server.addr, server.port, message.payload, 0)
end
return false
end
另见
- Lua 脚本概览 - 核心 Lua 脚本概念和钩子
- 消息 API - 消息对象方法和二进制读取函数
- Modbus 辅助函数 - Modbus 协议辅助函数
- MQTT 辅助函数 - MQTT 发布辅助函数