即使使用有效 IP 也测试无带宽
Test no-bandwidth even with valid IP
我正在使用 nodeMCU ESP8266 12E 开发板,我可以成功连接到我的 wifi 网络并测试 IP。问题是,拥有 IP 并不一定意味着有可用带宽。可能是 ISP 关闭了,我的路由器仍然给 ESP8266 一个有效的 IP。
我该如何处理?
我一直在研究下面的代码,看看它如何响应当我拔下调制解调器到路由器的电线以模拟“NO -带宽”的情况。我以为 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())
下图显示了输出。有人可以告诉我如何在我拥有有效 IP 的情况下感知 "NO-Bandwidth" 吗?
I am a complete novice in Lua and the NodeMCU api
你说的"no-bandwidth"好像是没有网络连接吧?如果是这样,那么这个问题似乎与这两个问题都无关。 IMO 这更像是一个基本的网络问题。
- "DHCP timeout"表示设备获取IP地址超时
- "Got 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)
我正在使用 nodeMCU ESP8266 12E 开发板,我可以成功连接到我的 wifi 网络并测试 IP。问题是,拥有 IP 并不一定意味着有可用带宽。可能是 ISP 关闭了,我的路由器仍然给 ESP8266 一个有效的 IP。
我该如何处理?
我一直在研究下面的代码,看看它如何响应当我拔下调制解调器到路由器的电线以模拟“NO -带宽”的情况。我以为 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())
下图显示了输出。有人可以告诉我如何在我拥有有效 IP 的情况下感知 "NO-Bandwidth" 吗?
I am a complete novice in Lua and the NodeMCU api
你说的"no-bandwidth"好像是没有网络连接吧?如果是这样,那么这个问题似乎与这两个问题都无关。 IMO 这更像是一个基本的网络问题。
- "DHCP timeout"表示设备获取IP地址超时
- "Got 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)