2017-07-01 13 views
0

ブロードキャストパケットを特定のポートに送信しようとしていますが、コードで奇妙なエラーが発生して修正が見つからないようです。 私はnet.socketを使ってみました:connect()を呼び出してから、 "send()"メソッドを呼び出すと動作しませんでしたが、net.socket:on( 'connection')とを送ってください。net.socket:connect()は同期していないと思います。net.socketを呼び出すときにNodeMCUがクラッシュします。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: unprotected error in call to Lua API (init.lua:24: attempt to call method 'connect' (a nil value))

ライン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 

私は次のエラーが表示されます:私はそれがそのように働いていたかどうかを確認するために、最初の接続イベントのリッスンを試してみました。その後

PANIC: unprotected error in call to Lua API (init.lua:24: invalid callback name)

ライン24はSRVです。 on( 'connection')行。

ここで何が起こっているようですか?他の多くの人がArduino-IDEバージョンを使用しているので(btw、これはまだnodemcuか、ESP8266では別のファームウェアが必要ですか?)、Googleの結果はあまりありません。 ブロードキャストIPを取得していて、APに接続しています。私はここでwifi接続部分を投稿していませんでした。なぜなら、mqttとhttp接続がうまく動作するかどうかをテストするために使ったからです。

SDK 2.1.0(116b762)のLua 5.1.4には、のネットモジュールが含まれています。

答えて

1

あなたの試みは、UDPがコネクションレスプロトコルであるとは思われないため、すべて失敗しました。したがって、UDPにはconnect()またはon('connection'...はありません。

send()は接続ではなくソケットで呼び出す必要があるため、最初の試行に失敗しました。 connectionコールバック名はUDPではなくTCPにのみ使用可能であるため、2番目の呼び出しが失敗しました。

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

+0

働い

はこのような何かを試してみてください!ありがとうございました:)私は本当にそれがプラットフォームのバグだと思って希望を失い始めていました。 – Azurium

+0

私はUDPがコネクションレスであることを知っていましたが、いくつかのGoogleの結果に触発され、誰かのように思えるので、実際にnodemcuメソッドに疑問を呈していませんでした。次回のリリースではnet.createConnectionが暗号化されていないTCP接続を常に作成するように変更されます_ 私はWaybackマシンを使用して私が夢ではないことを確認しました:))。私は文書の中でcreateUDPSocketの部分を見逃していました。 もう一度おねがいします! – Azurium

+0

大きなGがあなたを導くかもしれない情報源を信頼しないでください。私たちのAPIドキュメント(あなたのファームウェアブランチと一致するもの)は唯一の真実のソースです。 –

関連する問題