尝试调用net.socket:connect()时NodeMCU崩溃

时间:2017-07-01 08:49:21

标签: sockets lua esp8266 nodemcu

我正在尝试将广播数据包发送到某个端口,但似乎代码提供了一些我无法找到解决方案的奇怪错误。 我已经尝试过使用net.socket:connect()然后调用“send()”方法,这个方法不起作用,然后我说我应该使用net.socket:on('connection')和发送,因为我认为net.socket:connect()不是同步的。但这也给出了一个奇怪的错误......

对于此代码:

function sendBroadcastPacket()
    bip = wifi.sta.getbroadcast()
    srv = net.createConnection(net.UDP,0)
    print('Trying to connect on: ', bip)
    srv:connect('9001', bip)
    srv:send("Broadcast packet from: "..NODE_ID, function(sent)
            print("Broadcasted packet! "..sent)
        end)
end

我收到以下错误:

  

PANIC:调用Lua API时出现无保护错误(init.lua:24:尝试   调用方法'connect'(零值))

第24行是 srv:connect 行。

之后我尝试首先监听连接事件,看看它是否有效:

function sendBroadcastPacket()
    bip = wifi.sta.getbroadcast()
    srv = net.createConnection(net.UDP,0)
    print('Trying to connect on: ', bip)
    srv:on('connection', function(sck, c)
        sck:send("Broadcast packet from: "..NODE_ID, function(sent)
            print("Broadcasted packet! "..sent)
        end)
    end)

    srv:connect('9001', bip)
end

我收到以下错误:

  

PANIC:调用Lua API时出现无保护错误(init.lua:24:无效   回调名称)

第24行是 srv:on('connection')行。

这里似乎发生了什么?谷歌的结果并不多,因为很多其他人都使用Arduino-IDE版本(顺便说一下,仍然是nodemcu还是ESP8266需要不同的固件?)。 我正在获得广播IP,它连接到AP。我没有在这里发布wifi连接部分,因为它有效,我用它来测试mqtt和http连接有效。

我正在使用的版本,SDK 2.1.0(116b762)上的Lua 5.1.4,包含 net 模块。

1 个答案:

答案 0 :(得分:1)

您的尝试都失败了,因为您似乎并不认为UDP是无连接协议。因此,UDP没有connect()on('connection'...

第一次尝试失败,因为需要在套接字上调用send()而不是在连接上调用connection。第二个失败,因为function sendBroadcastPacket() local port = 9001 local bip = wifi.sta.getbroadcast() print(string.format("Broadcasting to %s:%d", bip, port)) net.createUDPSocket():send(port, bip, "foo bar") end 回调名称仅适用于TCP,而不适用于UDP。

尝试这样的事情:

<app-list (requestFetch)="fetch($event)"></app-list>  

文档:https://nodemcu.readthedocs.io/en/latest/en/modules/net/#netudpsocket-module