[英]How can I find the IP address of IP Cam on network using android programatically
我需要连接在路由器上的IP cam的IP地址和端口号。 您已经知道大多数IP Cam具有admin,密码和设备ID。
我知道设备ID,管理员和密码,对Java / android不太熟悉。 如果有人与我分享具有显式添加权限的Java和xml的教程/博客或代码段
注意:假设android设备和IP Cam连接在同一路由器(本地网络)上
注意:我有中国制造的IP Cam。 这是产品的链接。 产品链接
我知道有很多为此目的可用的应用程序,但我的目标是学习和做其他事情。
您可以ping所有可能的地址,以列出所有响应的地址,然后获取其主机名以使其与您的设备ID相匹配。”
代码示例:
import java.util.List;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.concurrent.CyclicBarrier;
public class HostFinder {
private static int ADDR_MAX = 256;
private List<InetAddress> reachableAdresses;
private String hostname;
private CyclicBarrier cb;
public HostFinder(String hostname){
this.reachableAdresses = Collection.synchronizedArrayList();
}
public void find(Handler handler, String hostname){
// Building possible adresses
InetAddress localhost = InetAdress.getByName("localhost");
String[] splitAddr = localhost.toString().split(".");
String root = splitAddr[0] + "." + splitAddr[1] + "." + splitAddr[2];
// Callback action when the treahd finishes
this.cb = new CyclicBarrier(ADDR_MAX, () -> {
for(InetAddress addr: reachableAdresses){
if(addr.getHostName().equals(hostname)){
handler.handle(add);
break;
}
}
});
// Launching a thread that will ping each address possible on the local network
for(int i = 0; i < ADDR_MAX; ++i) {
Thread t = new Thread( () -> {
InetAddress addr = InetAddress.getByName(root + "." + i);
if(addr.isReachable(5000)){
reachableAdresses.add(addr);
}
else{
try {
this.cbr.await();
} catch (Exception ex) {
System.out.println("Thread error");
}
}
});
t.start();
}
}
// Async handler to fetch the data
public interface Handler{
public void handle(InetAddress addr);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.