我正在尝试检测设备的IP(ESP8266),它充当服务器并连接到同一网络。所以我可以向它发送一些GET请求,但每次我的路由器重新启动设备时都会分配一个不同的地址,因此每次我必须从路由器查找其IP并将其放入应用程序以让它再次开始工作
我找到了一些可以完成我的工作的rorist/android-network-discovery,但我很难在我的应用程序中实现它(缺少文档),其次我的防病毒软件会将其检测为病毒。
我正在尝试像Belking WeMo应用程序那样做。
我现在有什么选择?
答案 0 :(得分:1)
public static String getMyIPAddress() {//P.S there might be better way to get your IP address (NetworkInfo) could do it.
String myIP = null;
try {
List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface intf : interfaces) {
List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
for (InetAddress addr : addrs) {
if (!addr.isLoopbackAddress()) {
String sAddr = addr.getHostAddress().toUpperCase();
boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
if (isIPv4)
myIP = sAddr;
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return myIP;
}
:
IP
上面的方法会返回分配给我们手机的当前PING
,我们可以开始PING
指示连接到同一网络的其他人String ipAddress = getMyIPAddress();
String subnet = ipAddress.substring(0, ipAddress.lastIndexOf("."));
String currentHost;
for (int i = 0; i < 255; i++) {
currentHost = subnet + "." + i;
Process p1 = Runtime.getRuntime().exec("ping -c 1 " + currentHost);
int returnVal = p1.waitFor();
boolean reachable = (returnVal == 0);
if (reachable) {
//currentHost (the IP Address) actually exists in the network
}
}
返回响应然后肯定IP存在于同一网络中,遵循以下代码在后台线程中:
Pining
正如您在上面的代码中看到的那样,我们在0-255和IP Address
之间循环,reachable
凡属于network
的人实际上都在var MouseFetcher;
MouseFetcher = cc.EventListener.create({
event: cc.EventListener.MOUSE,
TP: cc.Point,
initial:function(){
this.TP = new cc.p(cc.winSize.width/2, cc.winSize.height/2);
},
onMouseDown: function (event) {
this.TP = event.getLocation();
return true;
},
onMouseMove: function (event) {
},
onMouseUp:function(event){
this.TP = event.getLocation();
var i;
for(i = 0; i < clickables.length; i++){
if(clickables[i].containsPoint(this.TP)){
clickables[i].touchEvent();
}
}
}
});
内。< / p>
答案 1 :(得分:0)
IP Tools和Fing都可以进行网络发现。它们是免费的应用程序。
我相信他们只需ping设备子网中的每个IP地址并等待响应。您可以自己制作代码。
您可能需要查看此文章以获取更多信息:
java code to ping an IP address
提示:在等待超时时使用ThreadPoolExecutor进行良好的并行化。
答案 2 :(得分:0)
为什么不使用静态IP地址分配?如果您对路由器配置有一些访问限制,那么您可以尝试其他一些选项:
arp -a
命令查找IP-MAC映射。