如何在本地网络上为指定的端口地址检测运行Java程序的主机?

如何在本地网络上为指定的端口地址检测运行Java程序的主机?,java,network-programming,Java,Network Programming,我正在从事一个项目,在该项目中,我需要检索本地网络上的主机列表,这些主机在预先指定的端口(例如端口55283)上运行Java应用程序 还有,通过什么方式可以找到主机的MAC地址? 我目前正在我的项目中使用套接字(使用JDK 7) 我应该看到的任何外部库或API?请提供任何其他源代码。如果您使用的是windows,请使用java中的进程执行命令net view 它将为您提供如下输出 C:\Users\NiRRaNjAN>net视图 服务器名称备注 \NIRRANJAN-PC 命令已成功完成 解析

我正在从事一个项目,在该项目中,我需要检索本地网络上的主机列表,这些主机在预先指定的端口(例如端口55283)上运行Java应用程序 还有,通过什么方式可以找到主机的MAC地址? 我目前正在我的项目中使用套接字(使用JDK 7)
我应该看到的任何外部库或API?请提供任何其他源代码。

如果您使用的是windows,请使用java中的
进程执行命令
net view

它将为您提供如下输出

C:\Users\NiRRaNjAN>net视图

服务器名称备注


\NIRRANJAN-PC

命令已成功完成

解析这些行,您将获得给定网络中在线机器的名称。然后使用
InetAddress.getByName(“主机”).getHostAddress()获取机器的ip地址方法。下面是这方面的示例代码

            Runtime runtime = Runtime.getRuntime();
            Process process = runtime.exec("net view\n");
            InputStream in = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder contents = new StringBuilder();
            String line = reader.readLine();
            while(line != null) {
                if(line.isEmpty()) {
                    line = reader.readLine();
                    continue;
                }
                contents.append(line).append(System.getProperty("line.separator"));
                line = reader.readLine();
            }
            reader.close();
            String[] ips = contents.toString().split(System.getProperty("line.separator"));
            ArrayList<String> networkIPs = new ArrayList<>();
            if(ips.length >= 3) {
                for(int i=2;i<ips.length-1;i++) {
                    if(ips[i].isEmpty()) {
                        continue;
                    }
                    networkIPs.add(InetAddress.getByName(ips[i].replaceAll("\\\\", "").trim()).getHostAddress());
                }
            }
            System.out.println(networkIPs);
Runtime=Runtime.getRuntime();
Process=runtime.exec(“网络视图”\n);
InputStream in=process.getInputStream();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(in));
StringBuilder内容=新建StringBuilder();
字符串行=reader.readLine();
while(行!=null){
if(line.isEmpty()){
line=reader.readLine();
继续;
}
contents.append(line.append(System.getProperty(“line.separator”));
line=reader.readLine();
}
reader.close();
String[]ips=contents.toString().split(System.getProperty(“line.separator”);
ArrayList networkIPs=新的ArrayList();
如果(ips.length>=3){

对于(int i=2;我尝试过一些方法??最初我尝试的是蛮力方法…通过ping网络上所有可用的计算机。但正如你所猜测的那样…这是一种非常糟糕的方法。你尝试过下面的答案吗?然后我开始寻找一种方法,将cmd查询的结果包含到java中…我在我的计算机上进行了多播ping网络,然后使用arp命令“arp-a”使所有可用的计算机及其mac地址联机。但我不知道如何将结果用于我的java程序。通过任何方式,我可以在我的java程序中使用cmd查询,我现在将尝试:)答案有什么问题???它不起作用吗?我还没有尝试过这个解决方案。我到现在为止还没有给这个答案打分。