无广播的局域网网络发现

时间:2016-07-05 09:05:12

标签: network-programming broadcast

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

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

潜在的解决方案:这就是我的想法:

  • 将本地服务器和客户端连接到外部服务器,通过外部服务器通过客户端传送本地服务器ip,然后直接连接并断开与服务器的连接。由于额外的托管成本,这并不理想。
  • 定期向子网上的所有ips发送常规UDP消息?这可能会被任何体面的防火墙接收并阻止,对吧?
  • 在服务器上放置一个二维码,孩子们会用客户端应用程序拍照并让它以这种方式连接?可能更麻烦。
  • 让服务器播放与客户端正在收听的号码对应的随机音吗? (演讲者可能并不总是工作)

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我能想到的是所有设备之间的ad-hoc通信协议。假设您有1台服务器和10台客户端。所有设备都应运行绑定到固定端口的服务(例如服务器发现),例如9999.现在,只要客户端想要连接到服务器并且不知道IP,它就会启动扫描。循环通过不同的IP并尝试连接到9999.如果它设法命中,它会要求服务器IP。如果它设法击中服务器,它将获得IP,因为服务器知道它自己的IP,并且客户端将维护服务器IP在缓存中。如果客户端击中另一个客户端。它可以要求服务器IP。它是另一个客户知道IP将分享其他信息下降的信息。 我同意有很多开销,但我认为这与声音不同,并且每次都会降低打印QR的成本。

答案 2 :(得分:0)

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

如果局域网上没有太多同行(少于100),我认为udp广播工作正常,你不会污染网络。

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