即使使用有效的IP,也可以测试无带宽

时间:2016-10-11 00:16:58

标签: lua wifi nodemcu

我正在使用 nodeMCU ESP8266 12E 主板,我可以成功连接到我的wifi网络并测试IP。问题是,拥有IP并不一定意味着有可用的带宽。可能是ISP关闭了,我的路由器仍然给ESP8266一个有效的IP。

我该如何处理?

我一直在玩下面的代码,看看当我从调制解调器拔出电线到路由器时如何响应以模拟" NO-Bandwidth "情况。我以为STA_DHCP_TIMEOUT会自动解决这个问题,但它不像我想的那样工作。原谅我的无知,因为我是Lua和NodeMCU api的完全新手。

     wifi.eventmon.register(wifi.eventmon.STA_CONNECTED, function(T) 
     print("wIfI Connected")
     end)

     wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T) 
     print("wIfI Disconnected")
     end)

     wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T) 
     print("wIfI Got an IP")
     end)

     wifi.eventmon.register(wifi.eventmon.STA_DHCP_TIMEOUT, function() 
     print("DHCP TIMEOUT")
     end)

    wifi.setmode(wifi.STATION)
    wifi.sta.config("mySSID","myPassword")
    print(wifi.sta.getip())

下图显示了输出。有人可以建议如何感知" NO-Bandwidth"虽然我有一个有效的IP? enter image description here

1 个答案:

答案 0 :(得分:3)

  

我是Lua和NodeMCU api的完全新手

通过“无带宽”你似乎意味着没有互联网连接,对吧?如果是这样,那么这个问题似乎与两者中的任何一个都无关。 IMO它更像是一个基本的网络问题。

  • “DHCP超时”表示设备超时获取IP地址。
  • “获得IP”表示您的网络基础架构的一个组件(DHCP服务器)可以访问并为您的设备分配了IP地址。

正如您所说,这并不一定意味着该设备实际上可以连接到互联网。如果路由器充当DHCP服务器,并且连接到路由器的调制解调器提供互联网访问,则可以理解的是,如果断开两者,设备将无法访问互联网。

要检测是否可以从您的设备访问互联网,您需要尝试连接到那里的服务器。使用NodeMCU最简单的方法是将GET request发送到已知资源,看看是否收到回复。你显然需要HTTP模块。

http.get("http://httpbin.org/ip", nil, function(code, data)
    if (code < 0) then
      print("HTTP request failed")
    else
      print(code, data)
    end
  end)

更新20181130

以后改进自己的答案永远不会太晚......比使用HTTP模块更容易尝试DNS解析如下:

net.dns.resolve("www.google.com", function(sk, ip)
    if (ip == nil) then print("DNS fail! Maybe not connected to the internet.") else print(ip) end
end)
相关问题