【问题标题】:How to find Socket.IO server on the same LAN?如何在同一个局域网中找到 Socket.IO 服务器?
【发布时间】:2017-06-24 07:33:35
【问题描述】:

我正在开发一个连接同一网络上的设备的应用。

任何设备都可以作为服务器,我希望客户端能够自动找到服务器,而无需用户手动输入服务器的 IP 地址。

我打算这样做:

  1. 找到客户端的IP,例如192.168.0.2
  2. 循环通过 192.168.0.(0->255)
  3. 尝试连接所有这些 IP,直到连接成功

这是正确的方法吗?我可以做得更快吗?同一个网络的IP总是在x.x.x.(0->255)的范围内吗?

如果相关,我同时使用 Java 和 JavaScript(Node.js)。

【问题讨论】:

  • 正如@GhostCat 所写,广播会命中局域网上的每一台机器,但它也会中断局域网上的每一台机器,这不一定是可取的。为了解决这个问题,您可以使用多播,这是对一组机器的广播,这些机器侦听发送到多播组的数据包。它是广播的选择性。如果您有主机订阅多播组,那么只有这些主机会被多播流量中断。服务器可以订阅多播组。

标签: javascript java node.js networking socket.io


【解决方案1】:

udp 广播是我的客户端在本地网络上找到我的服务器的方式。 服务器发回套接字服务器用于连接的端口号

当服务器运行时,响应几乎是即时的,所以我只有 2 秒的超时时间,并且只尝试一次

【讨论】:

    【解决方案2】:

    这里有一个选项:而不是“迭代”地址范围并向每个地址发送单独的数据包;您可以考虑向整个子网发送broadcast

    换句话说:您的客户只是大喊“我在这里”;服务器“听到”并做出响应;类似于 DHCP 等协议的工作方式。

    编辑关于如何回应“广播未回答”的评论:

    实际上,您现在正在接近那些使“分布式”计算困难的主题。有很多问题可能会出现;以及许多不同的解决方案。

    开头是:你会用一个广播吗?还是尝试多次?!并且可能会增加后续广播之间的延迟?

    问题是:这里没有人能告诉你。答案很大程度上取决于您的“域”,以及对您的应用程序用户最有意义的内容。

    我的建议是:研究现有的做类似事情的开源产品;并研究他们发现了什么样的问题;以及他们如何处理。我知道,这很广泛;但这种“广泛性”来自“整个主题确实很广泛”。

    【讨论】:

    • 感谢您的回答。我正在尝试实现这一点。但是有一件事,我应该等多久才能确定没有服务器?这种事情需要几毫秒还是几秒?
    • 你找到方法了吗? obv 在普通 LAN 设置下。
    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多