跳到主要内容

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

另见