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

How to list all computers in network?

对于我制作的 java 小游戏,我希望能够在同一(家庭)网络中的两台计算机上玩它。我想我会使用 RMI,现在正在尝试使用 ipaddress 192.168.2.3 上的计算机。 我知道我可以在我的另一台计算机 192.168.2.6 上的这个 IP 地址上搜索注册表,但我想显示我的计算机所连接的网络中所有 IP 地址的列表。最好只有当他们真正举办比赛时。

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

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

"ping -n 1 192.168.2.i" 对于所有 i,其中 0<=i<=255,

总是正常退出,所以结果总是为真。

获取与运行 JVM 的计算机位于同一网络中的计算机的 IP 地址列表的最佳方法是什么?

通过链接的答案,您应该能够将可用接口筛选为几个可能的选项(即接口已启动、无环回、具有 IPv4 地址等)。

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

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

编辑:我发现 this blog post,其中包含的代码或多或少与我描述的相同。