【问题标题】:lua serialize array for UDP用于UDP的lua序列化数组
【发布时间】:2020-08-15 16:57:31
【问题描述】:

我正在尝试通过 udp 通过 lua 脚本客户端将几条数据发送到 node.js 服务器。

将包含字符串的字符串 var 传递给函数。在函数内部,正在创建一个数组以添加另外 2 个字符串,这些字符串是在函数外部定义的 id,用于在接收端识别 msg 的目的地。

我已经确认所有 3 个变量都在函数内部定义。然后我创建数组 bossMsg 并尝试通过 sendto() 发送它。我相信这是发生错误的地方,因为我需要序列化数组,但是阅读信息我仍然不清楚如何执行此操作。难道没有一种简单的方法可以将数据序列化,以便可以通过 sendto() 发送吗?

提前感谢您的帮助。

PandaBoss.sendBossMessage = function(msg)

    bossMsg = {msg, g_ID, c_ID}
    socket.try(PandaBoss.UDPSendSocket:sendto(bossMsg, ip, port))

end

【问题讨论】:

    标签: arrays serialization lua udp


    【解决方案1】:

    sendto 将数据报发送到指定的 IP 地址和端口号。数据报是一个带有数据报内容的字符串

    所以你必须将bossMsg 序列化为一个字符串。 最简单的方法是将其序列化为 JSON。像这样的:

    -- https://github.com/rxi/json.lua
    json = require "json"
    
    PandaBoss.sendBossMessage = function(msg)
    
        bossMsg = {msg, g_ID, c_ID}
        socket.try(PandaBoss.UDPSendSocket:sendto(json.encode(bossMsg), ip, port))
    
    end
    

    【讨论】:

    • 感谢您的回答。我今晚将对此进行测试并给出结果。我需要在另一端调整我的代码以反序列化它,以便我可以让变量能够测试。目前它正在等待一个数组。我正在尝试这个server.on('message', function(msg) { console.log(${msg[0]}); msg = ${msg[0]}; g_ID = ${msg[1]}; c_ID = ${msg[2]}; });
    • 这段代码不走运。这是错误消息JSON:encode must be called in method format
    • 错误信息给了你一个提示:你应该以不同的方式调用你的JSON库的encode方法,例如JSON:encode(table)
    • 我确实注意到了,最终也注意到了这一点。我更正了它,然后收到一个关于它是 nil 值的错误。我尝试以不同的方式创建表格,甚至打印了表格的内容,所以我知道它不是 nil 值。仍在测试,但不明白为什么它说 nil。
    • 所以稍微调整一下,终于成功了。感谢您为我指明正确方向的帮助。
    猜你喜欢
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2015-11-14
    • 2019-08-12
    • 1970-01-01
    • 2011-08-11
    相关资源
    最近更新 更多