networking - 在 LAN 上实现设备发现的最佳方法是什么

标签 networking device broadcast multicast discovery

我在网络编程方面几乎没有经验,我正在编写一个多平台系统,该系统要求每个设备能够在同一个 LAN 中找到其他设备。我正在寻找正确的方法来做到这一点,并希望这里的人们可以提供好的建议。以下是我的设计要求:

  • 我使用的是C++,解决方案需要是跨平台的,至少可以在iOS、Windows、Android上运行。
  • 如果可能的话,系统应该很轻,并且在没有特殊设置或网络要求的情况下工作。

  • 以下是我正在考虑的不同方法:
  • 使用 uPnP 协议(protocol),但我不是很熟悉,而且似乎没有很多关于该主题的代码示例。
  • 使用传统的socket方式,在每台设备上同时创建Server/Client,并将数据包发送到局域网中的每一个IP。之后手动完成所有操作。如果我错了,请纠正我,如果我向广播地址发送数据包,是否意味着系统会自动将我的数据包发送到子网内的每个 IP?
  • 使用外部服务器,所有客户端都将注册到该服务器,然后从该服务器获取有关其他(已注册)客户端的信息。但是,我不确定每个客户端应该连接哪些信息才能确定它们在同一个 LAN 中。

  • 让我知道我的想法是否有意义。任何意见是极大的赞赏。

    最佳答案

    您没有列出的一个选项是 ZeroConf's DNS-SD协议(protocol)。

    它被 Apple 大量使用 - 将其推销为 Bonjour (nee Rendezvous)。
    与 iOS 和 MacOSX 紧密集成。
    Apple 还提供了 Windows实现,一个 SDK 并开源了 mDNS 服务。

    Android 似乎支持它out of the box .

    还以 Avahi 的形式对 Linux 提供了强大而成熟的支持。 ,包含在大多数桌面发行版中。

    用户需要安装任何东西的唯一平台似乎是 Windows,即使这样,它也安装了 iTunes(用于音乐库共享)和任何 Apple 无线接入点的设置软件。

    关于networking - 在 LAN 上实现设备发现的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16226076/

    相关文章:

    macos - 苹果的 "DVD or CD Sharing"协议(protocol)是如何工作的?

    networking - Linux 内核中的 TCP/IP 堆栈

    objective-c - 在设备上测试应用程序什么都不做

    android - 使用套接字从Android设备连接到PC?

    javascript - Angular JS 广播未进入子范围

    Android 在热点启用设备上发送 UDP 广播

    java - 如何处理服务器之间的时间不同步

    java - 如何使用java关闭/重新启动另一台Windows PC?

    iOS 方向在相机关闭后适应未经批准的设备方向

    wcf - 如何从服务器向 WCF 中的所有客户端发送通知消息(可以说是广播)?