Network programming 无广播局域网上的网络发现

Network programming 无广播局域网上的网络发现,network-programming,broadcast,Network Programming,Broadcast,简短版本:当禁用广播时,您建议如何将客户端连接到位于同一本地网络上的服务器,而无需手动输入ip 更多详细信息:我正在为儿童开发一款教育性多人游戏。出于安全原因,许多学校似乎都在屏蔽广播。孩子们还很小,因此他们可能很难手动进入IP,并且容易出错。他们都将在同一个房间,都将看到服务器屏幕。这个游戏是统一制作的 潜在解决方案:以下是我的想法: 将本地服务器和客户端连接到外部服务器,通过外部服务器通过客户端与本地服务器ip通信,然后直接连接并断开与服务器的连接。不理想,因为额外的托管成本 是否定期

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


更多详细信息:我正在为儿童开发一款教育性多人游戏。出于安全原因,许多学校似乎都在屏蔽广播。孩子们还很小,因此他们可能很难手动进入IP,并且容易出错。他们都将在同一个房间,都将看到服务器屏幕。这个游戏是统一制作的


潜在解决方案:以下是我的想法:

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

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

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

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

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

如果局域网上没有太多的对等点(少于100个),我认为udp广播工作正常,不会污染网络

为了了解你的“池塘”,我建议你嗅嗅一下当地的交通状况。
有很多广播:arp、windows、ipp、dropbox…

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