如何列出网络中的所有计算机?

时间:2015-01-30 12:10:00

标签: java networking rmi

对于我制作的小型java游戏,我希望能够在同一个(家庭)网络中使用两台计算机进行游戏。我想我会使用RMI,现在正在尝试使用ipaddress 192.168.2.3上的计算机。 我知道我可以在192.168.2.6的其他计算机上搜索此ipaddress上的注册表,但我想显示我的计算机所连接的网络中所有ipaddresses的列表。只有当他们真正主持比赛时才有可能。

现在我在stackoverflow上尝试了一些问题:

,但我认为我不需要所有的计算机网络接口,InetAddress.isReachable()似乎总是导致错误(即使我可以通过cmd ping并且我已关闭防火墙)并调用命令行

“ping -n 1 192.168.2.i”for all i,其中0< = i< = 255,

始终退出正常,因此始终为真。

在与运行JVM的计算机相同的网络中获取计算机的ipaddresses列表的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

使用链接的答案,您应该能够将可用的接口过滤到几个可能的选项(即,启用的接口,没有环回,具有IPv4地址等)。

要发现游戏主机,您可以执行以下操作。

  • 让游戏主机在特定端口上侦听UDP广播。
  • 让客户端从上面向每个剩余接口的广播地址发送UDP广播。广播地址可以由班级getBroadcast()中的InterfaceAddress确定。
  • 主持人回复,让客户知道它正在等待。使用UDP时,主机IP位于收到的DatagramPacket中。使用TCP时,可以从Socket确定主机IP。
  • 然后客户端可以使用主机的地址建立直接连接和/或设置RMI。

编辑:我找到了this blog post,其中包含的代码与我所描述的内容差不多。