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