在没有广播的局域网上发现网络



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


进一步的细节:我正在为孩子们做一个教育多人游戏。许多学校似乎出于安全原因屏蔽了广播。孩子们还很小,所以手动输入IP对他们来说很困难,而且容易出错。他们都将在同一个房间,并且都将看到服务器屏幕。游戏是用Unity (c#)制作的。


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

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

听起来第一个是最理智和简单的解决方案。在这种情况下,你有什么其他的办法吗?

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

我能想到的是所有设备之间的自组织通信协议。假设您有1个服务器和10个客户端。所有设备都应该运行绑定到固定端口(例如9999)的服务(例如server-discovery)。现在,任何时候客户端想要连接到服务器,但不知道IP,它就开始扫描。循环通过不同的ip,并尝试连接到9999。如果成功命中,它会请求服务器IP。如果它设法击中服务器,它将获得IP,因为服务器知道它自己的IP,客户端将在缓存中维护服务器IP。如果客户端击中了另一个客户端。它可以请求服务器IP。如果另一个客户端知道IP,它将共享信息,否则会下降。我同意有很多开销,但我认为这将是强大的,不像声音,将减少打印qr的成本每次

在本地网络中,流量直接从一台主机到另一台主机。我不知道是哪些设备阻止了本地广播。

如果局域网中没有太多的对等体(少于100),我认为udp广播工作得很好,你不会污染网络。

要了解你的"池塘",我建议你嗅一嗅当地的交通。有很多广播:arp, windows, ipp, dropbox…

最新更新