我试图将一个广播包发送到某个端口,但是代码似乎产生了一些奇怪的错误,我找不到修复方法。我尝试过使用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我收到以下错误:
惊慌:调用Lua中未受保护的错误(init.lua:24:尝试调用方法'connect‘(一个零值))
第24行是srv:连接线。
之后,我尝试先侦听连接事件,看看它是否以这种方式工作:
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我收到以下错误:
恐慌:调用Lua中的无保护错误(init.lua:24:无效回调名)
第24行是srv:on('connection')线。
这里似乎发生了什么?google的结果并不多,因为很多人使用Arduino-IDE版本(顺便说一句,这仍然是nodemcu,还是您需要为ESP8266提供不同的固件?)我得到一个广播IP,它连接到AP。我没有在这里发布wifi连接部分,因为它可以工作,我使用它来测试mqtt和http连接。
我正在使用的版本Lua5.1.4在SDK2.1.0(116b762)上包含了net模块。
发布于 2017-07-01 19:39:52
您的尝试都失败了,因为您似乎不认为UDP是一个无连接的协议。因此,UDP没有connect()或on('connection'...。
第一次尝试失败,因为需要在套接字上而不是在连接上调用send()。第二个失败是因为connection回调名仅适用于TCP,而不适用于UDP。
试着做这样的事情:
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文档:https://nodemcu.readthedocs.io/en/latest/en/modules/net/#netudpsocket-module
https://stackoverflow.com/questions/44859051
复制相似问题