c++ - 使用 ESP8266 自动检测本地服务器

标签 c++ networking lua arduino esp8266

我有一个 ESP8266 模块(特别是 Cactus Micro r2),它能够连接到本地网络,然后通过 HTTP 协议(protocol)与我的本地服务器通信。但是,我必须提供我的服务器的网络 SSID、密码和 IP 地址。

ESP 模块是否可以向整个网络发送带有特定 header 的 HTTP 广播?然后,识别头部的服务器会响应,从而自动检测到它的 IP 地址?如果不使用 HTTP,是否可以使用 UDP 实现?客户端和服务器是否有一种通信模式可以相互发现?

到目前为止,我发明的唯一解决方案(或者更确切地说是变通方法)是遍历本地子网(通常为 192.168.1.1-192.168.1.254)的整个地址范围并尝试启动通信。但是,这非常慢(如果服务器的 IP 地址在范围的上半部分)。另外,它不能在 10.0.0.0 网络上运行(更不用说纯 IPv6 网络了……)。

最佳答案

如果您希望您的 esp 在任何专用网络中找到一个专用服务器,而不需要 DNS 和其他设置,这可能是一个答案:

  1. 在服务器端,实现 udp 广播。这会在某些时间间隔(例如 2 秒)之间广播自身的连接信息。这就像 wifi 信标(或蓝牙广告)。
  2. 在 esp 端,esp 必须知道 ssid。然后连接到网络。开始监听广播端口以获取特定消息。
  3. 收到消息后,解析并验证(authenticate等),然后从消息中获取参数,显示服务器。
  4. 最后使用参数与服务器通信,关闭广播监听。

关于c++ - 使用 ESP8266 自动检测本地服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34107819/

相关文章:

macos - osx - 获取当前桌面号的脚本

Android - 强制网络请求通过 wifi 而不是移动网络

networking - 为什么在快速恢复过程中会出现TCP拥塞窗口膨胀?

c++ - 使用goto会导致内存泄漏吗?

c++ - 在项目中只调用一次宏

c - libuv在建立多个连接时速度慢?

Lua 在 PowerPC/LynxOS 平台上的表现很奇怪,为什么?

c - Lua C 模块 : confused about including members

c++ - 类型类方法的参数推导(由 const 限定符重载)在 gcc 中以尾随返回类型失败,但在 clang 中没有

c++ - 使用 Accept() 的 Boost 线程中的性能/优先级 (Linux)