java - 获取所有本地 IP (arp -a)

标签 java lan

我正在制作一个不错的多人游戏应用程序,但我希望我的应用程序能够搜索您所在局域网中的主机。我知道你可以很容易地获得你自己的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/

相关文章:

c# - 从LAN读取8位数据并在GUI中显示

javascript - HTML5 + JS 足以进行局域网通信吗?

java - 从 Ruby 脚本执行 Ruby Gem

java - 使用带有gradle的proguard创建混淆的应用程序jar时出现重复的zip条目

java - 如何在 Apache POI XLS 中直接存储数据?

java - 如何让本地多人java游戏在线运行?

java - 如何在本地对等网络中查找在线用户?

delphi - 网络基础设施发现

Java实现Runnable : Cannot resolve Symbol 'start'

Java:在最后一分钟实现 Hit() 和 getNumHits()