繁体   English   中英

通过android java检测网络上连接的计算机

[英]Detect computers connected on network via android java

我正在编写一个Android应用程序,通过套接字连接与Windows服务进行通信。 代码正在运行,但我想添加检测本地网络上连接的设备的功能,以便应用程序可以确定哪台计算机正在运行我想要的Windows服务,我正在使用下面的代码,我也是从这个网站获得的。 我的问题是下面的代码只检测Android设备,并没有检测到我的笔记本电脑。 我可以从笔记本电脑上ping我的设备并从我的设备上ping我的笔记本电脑,那么该怎么办呢?

public void checkHosts(String subnet) {
    int timeout = 1000;
    for (int i = 1; i < 254; i++) {
        String host = subnet + "." + i;
        try {
            if (InetAddress.getByName(host).isReachable(timeout)) {

                System.out.println(host + " is reachable");
                System.out.println("Host Name: "
                        + InetAddress.getByName(host).getHostName());
            }
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

InetAddress.isReachable()不是很可靠。 如果ICMP消息被阻止,您将无法得到答案。

您可以做的是发送广播消息。 您的服务器应用程序必须侦听此消息并回答它。 这样您就可以获得服务器IP地址,并可以连接到它。 并且您只需发送一条消息即可到达子网中的所有主机。

发送和接收广播消息的示例代码

谢谢大家,我最终创建了一个到网络中每个IP的套接字连接,并从套接字显示主机名。 它向我展示了它们是Android设备还是Windows机器的所有设备。

当然,因为我在设备和计算机上使用套接字监听端口8000,所以使用套接字将给出结果IF和ONLY如果两端都在同一端口上监听,我只关心运行我的服务的计算机。

我非常感谢所有的建议和帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM