我正在编写一个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();
}
}
答案 0 :(得分:2)
InetAddress.isReachable()不太可靠。 如果ICMP消息被阻止,您将无法得到答案。
您可以做的是发送广播消息。 您的服务器应用程序必须侦听此消息并回答它。 这样您就可以获得服务器IP地址,并可以连接到它。 并且您只需发送一条消息即可到达子网中的所有主机。
答案 1 :(得分:0)
谢谢大家,我最终创建了一个到网络中每个IP的套接字连接,并从套接字显示主机名。它向我展示了所有设备,无论是Android设备还是Windows机器。
当然,因为我在设备和计算机上使用套接字监听端口8000,所以使用套接字将给出结果IF和ONLY如果两端都在同一个端口上监听,我只关心运行我的计算机服务。
我非常感谢所有建议和帮助:)