【发布时间】:2016-03-10 12:51:25
【问题描述】:
我有一个 ESP8266 模块(特别是 Cactus Micro r2),它能够连接到本地网络,然后通过 HTTP 协议与我的本地服务器通信。但是,我必须提供我的服务器的网络 SSID、密码和 IP 地址。
ESP 模块是否可以使用特定的标头向整个网络发送 HTTP 广播?然后,识别头部的服务器会响应,从而自动检测到它的IP地址?如果不使用 HTTP,是否可以使用 UDP 实现?客户端和服务器之间是否存在通信模式来发现彼此?
到目前为止,我发明的唯一解决方案(或者更确切地说是一种变通方法)是遍历本地子网的整个地址范围(通常是 192.168.1.1-192.168.1.254)并尝试启动通信。但是,这非常慢(如果服务器的 IP 地址在范围的上半部分)。另外,它不适用于 10.0.0.0 网络(更不用说纯 IPv6 网络...)。
【问题讨论】:
-
您需要一个 DNS 服务器来解析名称 -> IP 地址。当然,服务器需要在 DNS 上注册。您当然可以作弊并保留“最后已知地址”的记录,然后下次从该地址开始。但 DNS 是“正确”的解决方案。
-
那更糟 :D 是否有,至少,获得所有使用的 IP 地址的选项?类似于 Windows 命令提示符中的“arp -a”命令?这将显着减少迭代 IP 地址的数量...
-
arp -a只跟踪与您的机器(或您的机器已与)通信的 IP/mac 地址。如果它不“知道”服务器,那么它可能也没有与之交谈。 -
可以,但是可以通过广播ping(或者通过192.168.1.255 ping整个本地网络)来填充其他机器的列表...那么,可以模拟这样的系统吗?跨度>
-
嗯,这或多或少是一回事,不是吗。您要解决的实际问题是什么?这个问题已经通过发明 DNS 解决了,所以你显然是在尝试用不同的方式来解决这个问题,这通常意味着“你做错了”。
标签: c++ networking lua arduino esp8266