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

通过android java检测网络上连接的计算机,java,android,sockets,windows-services,Java,Android,Sockets,Windows Services,我正在编写一个Android应用程序,通过套接字连接与Windows服务进行通信。 代码正在运行,但我想添加检测连接到本地网络的设备的功能,以便应用程序可以确定哪台计算机正在运行我想要的windows服务,我也在使用从该网站获得的代码。我的问题是下面的代码只检测android设备,没有检测到我的笔记本电脑。我可以从我的笔记本电脑ping我的设备,也可以从我的设备ping我的笔记本电脑,那么接下来该怎么办 public void checkHosts(String subnet) { in

我正在编写一个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();
        }
    }
public void checkHosts(字符串子网){
int超时=1000;
对于(int i=1;i<254;i++){
字符串主机=子网+“+i;
试一试{
if(InetAddress.getByName(主机).isRecable(超时)){
System.out.println(可以访问主机+);
System.out.println(“主机名:”
+InetAddress.getByName(host.getHostName());
}
}捕获(未知后异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
InetAddress.isReachable()不太可靠。 如果ICMP消息被阻止,您将无法得到答复

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


谢谢大家。我最终创建了一个到网络中每个IP的套接字连接,并显示了套接字中的主机名。它显示了所有设备,无论是android设备还是windows机器

当然,因为我让套接字在设备和计算机上的端口8000侦听,所以当且仅当两端都在同一端口侦听时,使用套接字才会产生结果,我只关心运行我的服务的计算机


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

感谢您的建议尽管我不理解您在链接中给我的示例代码,但链接根据以下内容讨论了设备内的广播:“当正确的意图被激发时”他的答案是正确的,但链接是混乱的。试试这个——它也适用于Android的java,但有一个警告,你需要获得一个这样的例子:Thank you@Machinarius我会试试你的link@gerschu谢谢,尽管我尝试了不同的方法(如下面的答案所示)我将阅读你的链接中包含的内容,因为它似乎比我处理我的案例更快:255套接字+62k端口号->扫描网络花费的时间太长。