2016-05-30 30 views
0

我有以下代碼Socket連接的工作原理片斷,而不是從init.lua

conn = net.createConnection(net.TCP, 0) 
conn:on("sent", function(sck,c) 
    print("Sent") 
    sck:close() 
    end) 

conn:on("connection", function(sck,c) 
    print("Connected..") 
    sck:send("test") 
    end) 

conn:connect(9090, "192.168.1.89") 
print("Send data.") 

當作爲ESPlorer片斷運行這工作得很好,IE運行現場翻譯。我看到輸出「Connected ..」和「Sent」,並且信息出現在服務器上。當它是init.lua或我的mcu-temp.lua的一部分時,我甚至不會看到「Connected ...」消息。

與WIFI的連接正常,並且電路板在嘗試「實時」和文件之間沒有重置。我真的被困在爲什麼它以一種方式而不是另一種方式工作。

回答

1

到WIFI連接正常

我嚴重懷疑。如果你從ESPlorer運行,那麼是的,但不是在你重啓設備時。

連接到AP通常需要幾秒鐘。您需要等到連接後才能繼續啓動順序。請記住:對於NodeMCU,大多數操作都是異步和事件驅動的,wifi.sta.connect()不會阻止。

這是我從https://cknodemcu.wordpress.com/借來的一個啓動順序。

SSID = <tbd> 
PASSWORD = <tbd> 

function startup() 
    local conn = net.createConnection(net.TCP, 0) 
    conn:on("sent", function(sck, c) 
     print("Sent") 
     sck:close() 
    end) 

    conn:on("connection", function(sck, c) 
     print("Connected..") 
     sck:send("test") 
    end) 

    conn:connect(9090, "192.168.1.89") 
    print("Sent data.") 
end 

print("setting up WiFi") 
wifi.setmode(wifi.STATION) 
wifi.sta.config(SSID,PASSWORD) 
wifi.sta.connect() 
tmr.alarm(1, 1000, 1, function() 
    if wifi.sta.getip() == nil then 
     print("IP unavaiable, Waiting...") 
    else 
     tmr.stop(1) 
     print("Config done, IP is "..wifi.sta.getip()) 
     print("You have 5 seconds to abort startup") 
     print("Waiting...") 
     tmr.alarm(0, 5000, 0, startup) 
    end 
end) 

就在兩天前,我在SO上回答了幾乎相同的問題。有關替代解決方案,請參閱https://stackoverflow.com/a/37495955/131929

+0

初始化腳本比我所使用的腳本好很多,所以我肯定會使用它。雖然它沒有解決問題。我在目標主機上運行'nc -l 192.168.1.84 9090',以及我編寫的原始nodejs應用程序,並且沒有從套接字事件中獲取連接消息。 – Martin

+0

我很抱歉,它已經奏效!重新啓動虛擬機之後的防火牆規則是怪罪。 – Martin