测试无带宽即使有有效IP

我正在使用 nodeMCU ESP8266 12E 板,并且可以成功连接到我的WiFi网络并测试IP. 然而,拥有IP并不一定意味着有可用的带宽。也许ISP服务已经关闭,但是我的路由器仍然为ESP8266分配了有效的IP。

怎么解决这个问题呢?

我一直在尝试以下代码,以查看它如何响应“将电缆从我的调制解调器断开连接到路由器”以模拟“ 无带宽”的情况。我认为 STA_DHCP_TIMEOUT 会自动解决它,但它没有像我想的那样工作。请原谅我的无知,我对Lua和NodeMCU API完全是个新手。

     wifi.eventmon.register(wifi.eventmon.STA_CONNECTED, function(T)
     print("已连接WiFi")
     end)

     wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)
     print("WiFi已断开连接")
     end)

     wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
     print("已获取IP")
     end)

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

    wifi.setmode(wifi.STATION)
    wifi.sta.config("我的SSID", "我的密码")
    print(wifi.sta.getip())

下图显示了输出结果。请问有人可以指导我如何在拥有有效IP的情况下感知“无带宽”吗? 图片描述

点赞
用户131929
用户131929

我完全是Lua和NodeMCU api的新手。

当你说“没有带宽”时,你似乎是指没有互联网连接,对吗?如果是这样的话,那么这个问题似乎与这两个技术没有太大关系。这更像是一个基本的网络问题。

  • “DHCP超时”表示设备超时获取IP地址。
  • “已连接”表示你的网络基础设施(DHCP服务器)中的一个组件已经连接并为设备分配了IP地址。

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

要检测设备是否可以从互联网访问,你需要尝试连接到一个外部服务器。使用NodeMCU,最简单的方法是向已知的资源发送一个GET请求,然后查看是否成功响应。你显然需要使用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)
2016-10-11 01:13:54