【问题标题】:Network discovery on LAN without broadcast没有广播的局域网上的网络发现
【发布时间】:2016-07-05 09:05:11
【问题描述】:

短版:当广播被禁用时,您建议如何将客户端连接到位于同一本地网络上的服务器,而无需手动输入 IP?


更多详情:我正在开发一款面向儿童的教育多人游戏。出于安全原因,许多学校似乎都在阻止广播。孩子们会相当年轻,因此他们可能很难手动输入 IP 并且容易出错。他们都将在同一个房间里,并且都会看到服务器屏幕。游戏是用 Unity (C#) 制作的。


可能的解决方案:以下是我的想法:

  • 将本地服务器和客户端都连接到外部服务器,通过外部服务器通过客户端与本地服务器ip通信,然后直接连接并断开与服务器的连接。不理想,因为需要额外的托管费用。
  • 定期向子网上的所有 ip 发送常规 UDP 消息?这可能会被任何体面的防火墙接收并阻止,对吧?
  • 在服务器上放置一个 QR 码,孩子们会用客户端应用程序拍照并以这种方式连接?可能更麻烦。
  • 让服务器播放与客户端正在侦听的数字相对应的随机音调? (但扬声器可能并不总是有效)

听起来第一个是最理智和最简单的解决方案。对于这种情况下的人可以尝试什么,您还有其他想法吗?

【问题讨论】:

    标签: network-programming broadcast


    【解决方案1】:

    UDP 多播可能吗? 如果是,那么一个常见的解决方案是所有参与者都加入同一个多播组,并且服务器侦听一个众所周知的端口。如果客户端想知道服务器的地址,它会向多播组发送一个数据包,该数据包被客户端接收并用另一个数据包应答,然后客户端可以使用该数据包来确定服务器地址。 除此之外,服务器还可以通过向多播组发送合适的消息来定期宣布它们的存在。

    【讨论】:

      【解决方案2】:

      我能想到的是所有设备之间的临时通信协议。假设您有 1 个服务器和 10 个客户端。所有设备都应该运行绑定到固定端口(例如 9999)的服务(例如服务器发现)。现在,只要客户端想要连接到服务器并且不知道 IP,它就会开始扫描。循环通过不同的 IP 并尝试连接到 9999。如果成功命中,它会询问服务器 IP。如果它设法击中服务器,它将获得 IP,因为服务器知道它自己的 IP,并且客户端将在缓存中维护服务器 IP。如果客户端碰到另一个客户端。它可以要求服务器IP。如果其他客户端知道它将共享信息的 IP,否则会拒绝。 我同意有很多开销,但我认为这将不像声音那样强大,并且会降低每次打印 QR 的成本。

      【讨论】:

      • 谢谢,这可能是个好主意,因为不是每个客户端都需要 ping 每个设备。二维码会出现在服务器屏幕上,所以它不应该花费任何费用。
      • 哦,如果二维码出现在屏幕上,那应该是完美的解决方案。
      【解决方案3】:

      在本地网络上,流量直接从主机到主机。 我不明白哪些设备正在阻止本地广播。

      如果 LAN 上没有太多对等点(少于 100 个),我认为 udp 广播可以正常工作,并且不会污染网络。

      要了解您的“池塘”,我建议您嗅探本地流量。 广播有很多:arp、windows、ipp、dropbox...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-04
        • 1970-01-01
        • 2013-06-13
        • 1970-01-01
        • 2011-11-09
        • 2011-09-13
        • 1970-01-01
        • 2020-11-26
        相关资源
        最近更新 更多