![]() |
1
4
如评论中所述,HTTP不能像这样广播。 列举IP范围内的所有IP地址,并向每个IP地址发送HTTP请求,以查看是否有不太好的想法。一个不太好的主意有多大程度上取决于 Private IP Address Range DHCP服务器提供的子网掩码
你可能需要搜索很多IP地址。 如果您的IP范围不是192.168.0.0/24,那么您也无法同时探测所有这些。即使您不介意生成65000个线程,您的机器也没有足够的TCP端口可用于响应(根据操作系统的不同,您可能会得到30000个),因此您必须成批处理它们。 此外,如果您的网络甚至有点复杂,使用VLAN或路由器来分隔网络的不同区域,那么您的计算机将无法自行枚举这些区域使用的范围。此时,您可能会找到一种查询路由器或ActiveDirectory的方法,以查找网段以外的IP范围或主机。 总而言之,这不是一个好主意。 UDP可能更好更好的方法是使用UDP广播(正如其他人所建议的那样)。每个传感器节点将侦听特定的UDP端口,服务器将向子网的广播IP地址发送一条UDP消息。每个节点都将接收消息,然后节点上的代码将向UDP广播源(服务器)发送某种形式的响应。然后,服务器将从每个节点接收UDP响应,其中包括每个节点的IP地址。 在代码级别,您创建一个套接字,使用选定的端口号将其配置为UDP,然后服务器开始使用您选择的范例(同步、开始/结束、异步/等待)在该端口上接收数据。当数据到达端口时,将启动回调函数,并将接收到的数据和发送该数据的服务的IPEndPoint传递给您。 通常可以将网络配置中的不同路由器设置为转发UDP广播请求和相关响应,以便在最小配置的情况下(不超过让HTTP请求正常工作所需的配置),您可以在网段之外进行搜索。 可以找到C#中简单UDP服务器的示例 here . 查找子网无论您选择哪种方式,都可以使用以下代码获取所有子网及其广播地址或完整的IP地址集。它将找到您机器上所有适配器(世界上所有gin接头)上所有子网上的所有IP地址。 此代码不会消除127。 . .* 本地地址,您可能希望这样做,以避免再进行1600万个地址的无意义搜索。
希望这有帮助 |
![]() |
LA.27 · F#在Linux上-目标是net4xx 7 年前 |
![]() |
tayoung · 如何在GTK中禁用TextView的透明度? 7 年前 |
![]() |
McKay · C#WebRequest成功。NET但使用Mono失败 7 年前 |
![]() |
Cristian M · 将24位2的补码转换为int? 7 年前 |
![]() |
MadeInDreams · 更改Unity中的默认IDE 7 年前 |