我正在尝试将广播数据包发送到某个端口,但似乎代码提供了一些我无法找到解决方案的奇怪错误。 我已经尝试过使用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 模块。
答案 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