我正在制作一个不错的多人游戏应用程序,但我希望我的应用程序能够在你的局域网中搜索主机。我知道您可以很容易地获得自己的 IP,然后强制所有 IP 以查看是否连接了任何东西,但这对您的计算机来说都是一项艰巨的工作,即使您正确地进行多线程处理也需要一些时间。
在java中似乎没有获取arp表的好方法,但我希望有类似的方法可以快速有效地获取所有本地IP地址。
任何帮助将非常感激。
存在几个选项,可用于实现此目的。
去中心化的
您可以做的是从您的应用程序广播一个请求,询问网络上的每个主机当前是否可用于游戏(255.255.255.255
例如,发送请求将导致您的路由器重新传输您发送到 LAN 上的每个主机的数据报)。
这将确保只有已启动游戏并准备好游戏的主机才会响应此请求。
今天在 LAN 上大量使用了几种广播协议。其中之一是SSDP(简单服务发现协议),它与 UPnP 协议一起用于服务发现。不过,对于多人游戏,肯定有更适合广播/多播的协议。
集中式的
在多人游戏中发现玩家的最常见方法之一仍然存在于中央服务器上,请求者(正在寻找游戏的人)和托管者(正在托管游戏的人)都在该服务器上连接。
这种方法的缺点是存在单点故障,即服务器,但与分散式解决方案不同,它的优点是既适用于 LAN,也适用于 Internet(或每个基于 IP 的协议)。
如果我必须开发一个多人游戏,我会从这里开始挖掘您需要实现的主机发现功能。