我在android中开发移动应用程序。
这里我要检测任何Android手机的usb网络共享后的计算机,系统等的IP地址
我找不到解决办法。
如果我输入以下代码,那么它只需要手机的IP地址,我需要系统的IP地址
以下是代码
ArrayList<InetAddress> arrayList=new ArrayList<InetAddress>();
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
arrayList.add(inetAddress);
inetAddress=null;
}
}
} catch (SocketException ex) {
Log.e("SALMAN", ex.toString());
}
return arrayList;
请帮助我获取系统的IP地址,如果我们无法获得方法,请提及我。因为我是新手。
我使用的是Android 1.6。
在windows xp系统中有服务器端应用程序。该应用程序是由C#.net开发的Windows服务。
那个窗口服务监听某些端口,如234等。如果有一些数据进入端口,那么它将处理数据并通过该端口发送响应。
在android中,android应用程序通过socket将数据发送到windows服务。
Android手机是USB连接到运行Windows服务的系统。然后系统假设android手机是调制解调器,并为系统生成额外的IP地址。这个IP地址是在Android手机被连接时动态生成的。
对于通过套接字从移动到系统的数据传输。我需要在我的android编码中给出系统的ip地址(在系留之后)。
如果android编码中有任何方法来获取此IP地址。
请大家就此提出自己的想法。
答案 0 :(得分:7)
在网络共享后,无法在Android中找到在PC中创建的IP地址。没有API或其他方法可以找到它。
如果您使用InetAddress,它将返回192.168.42.129 - 这是由USB Tethering创建的DHCP地址。它不会帮助你沟通。
另一种方法是扫描IP列表。 USB Tethering将创建ip范围为192.168.42.1到192.168.42.255。您可以编写一个简单的扫描仪来查找哪个是活动的。但这需要一些时间。
答案 1 :(得分:2)
感谢上面'游泳N游泳'。我找到了一个代码 Retrieve IP and MAC addresses from /proc/net/arp (Android)
并修改了一下以获得具有有效mac地址的第一个IP。在使用系留的PC上作为单个用户进行开发时,效果很好。您可以根据公司名称等按照上述链接获取更多选择性IP。
public static String getUSBThetheredIP() {
BufferedReader bufferedReader = null;
String ips="";
try {
bufferedReader = new BufferedReader(new FileReader("/proc/net/arp"));
String line;
while ((line = bufferedReader.readLine()) != null) {
String[] splitted = line.split(" +");
if (splitted != null && splitted.length >= 4) {
String ip = splitted[0];
String mac = splitted[3];
if (mac.matches("..:..:..:..:..:..")) {
if (mac.matches("00:00:00:00:00:00")) {
//Log.d("DEBUG", "Wrong:" + mac + ":" + ip);
} else {
//Log.d("DEBUG", "Correct:" + mac + ":" + ip);
ips = ip;
break;
}
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return ips;
}
请注意,每次在untether之后系绳时,您必须在PC上启动Apache或其他进程以使新IP生效。这就是我的经历。