使用Lua的NodeMCU Socket客户端无法连接

我想将NodeMCU Socket客户端连接到Node.js Socket服务器。 我正在使用NodeMCU中的Lua编程语言。我尝试了客户端的以下代码,但它没有起作用。

wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","Password")
wifi.sta.connect()
ip = wifi.sta.getip()
print("你的IP地址是 "..ip)

sk = net.createConnection(net.TCP, 0)

sk:on("receive", function ( sck,c )
  print (c)
end)

sk:on("connection", function ( sck,c )
  print("已连接")
  sk:send("你好...")
end)

sk:connect(3000,"192.168.1.4")

node.js服务器代码已经经过测试并正常运行。

var app = require('http').createServer();
var io = require('socket.io')(app);

io.on('connection', function(socket){
  console.log('有人已连接');
});

app.listen(3000);
点赞
用户131929
用户131929

你对 NodeMCU 基础知识有误解了。NodeMCU 是异步和事件驱动的,即大部分调用都是非阻塞的。

这意味着,在你发出 wifi.sta.connect()(不会阻塞)之后,你需要等待设备获得 IP 地址,然后才能继续进行。这是我们文档中的一个简略的 启动顺序

function startup()
    -- 在这里进行操作
end

print("连接到 WiFi 热点...")
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID, PASSWORD)
-- 因为 config() 默认使用 auto-connect=true,所以 wifi.sta.connect() 不必要
tmr.alarm(1, 1000, 1, function()
    if wifi.sta.getip() == nil then
        print("等待 IP 地址...")
    else
        tmr.stop(1)
        print("WiFi 连接已建立,IP 地址:" .. wifi.sta.getip())
        print("您有 3 秒钟可以中止")
        print("等待中...")
        tmr.alarm(0, 3000, 0, startup)
    end
end)
2016-12-28 09:28:47