1


我正在开发一个Android的移动应用程序。
这里我想检测任何Android手机的USB绑定后,计算机,系统等的IP地址
我找不到解决方案。
如果我把下面的代码,然后它需要的只是电话的IP地址,我需要系统的IP地址如何获得Android手机USB绑定后的系统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新手。


我正在使用android 1.6。


在Windows XP系统中有服务器端应用程序。该应用程序是一个由C#.net开发的Windows服务。
那个windows服务监听诸如234等的一些端口。如果有些数据到达端口,那么它将处理数据并通过该端口发送响应。


在android中,android应用程序通过socket将数据发送到windows服务。
android手机USB连接到windows服务正在运行的系统。然后系统假定android手机是调制解调器,并为系统生成附加IP地址。该IP地址是在android手机被绑定时动态生成的。
用于通过套接字将数据传输到移动系统。我将需要在我的android编码中给出系统的IP地址(在连接后)。
如果在android编码中有任何方法来获取此IP地址。
关于这一点,请给出您的想法。

+0

你想要什么'系统'的IP地址?请记住,你应该考虑IP地址是相对于其他'系统'。当网络连接时,存在链中任何设备的多个IP地址(包括内部和外部IP)的绝佳机会。你想用你想找的IP地址做什么? – mbanzon 2012-07-25 09:27:41

+0

亲爱的mbanzon,我想通过Android中的套接字连接在移动设备和系统之间传输数据(这是tithered)。 – 2012-07-25 10:07:21

+0

我不认为手机和电脑之间的USB连接允许任何套接字连接。在我看来,你应该忽略系绳部分 - 而是研究如何使用Android进行USB传输。解决方案将取决于您想要传输的内容以及您正在制作的应用程序类型。也许通过安装的USB存储器传输简单文件就足够了? – mbanzon 2012-07-25 10:34:05

回答

6

绑定后无法从android中找到在PC中创建的IP地址。没有API或其他方式可以找到它。

如果使用InetAddress,它将返回192.168.42.129 - 这是由USB Tethering创建的DHCP地址。它不会帮助你沟通。

另一种方式是扫描IP列表。 USB共享将创建IP范围为192.168.42.1到192.168.42.255。你可以写一个简单的扫描仪来查找哪一个是活动的。但这需要一些时间。

+0

感谢您的想法droid dev – 2012-08-07 06:22:55

+3

或者干脆使用/ proc/net/arp :) – 2013-04-21 10:17:12

1

感谢上面的“游泳N游泳”。我在 Retrieve IP and MAC addresses from /proc/net/arp (Android)

找到一个代码,并修改了一下,以获得第一个IP地址有有效的MAC地址。在您的个人电脑上作为单个用户进行开发时,可以很好地工作。您可以按照上述链接,根据公司名称等

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系绳时,必须启动Apache或其他程序在PC上采取新的IP有效更具选择性,选择性的IP。这是我所经历的。