3


我正在用 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 服务。
该Windows服务侦听某些端口,例如234等。如果某些数据到达端口,那么它将处理数据并通过该端口发送响应。


在 android 中,android 应用程序通过套接字将数据发送到 windows 服务。
安卓手机通过USB连接到运行windows服务的系统,系统假设安卓手机为modem,并为系统生成额外的IP地址。这个IP地址是安卓手机连接时动态生成的。
对于通过套接字将数据从移动设备传输到系统。我需要在我的 android 编码中提供系统的 IP 地址(绑定后)。
如果android编码中有任何方法可以获取此IP地址。
所有人都请就此提出您的想法。

4

2 回答 2

8

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

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

另一种方法是扫描IP列表。USB Tethering 将创建 192.168.42.1 到 192.168.42.255 的 ip。您可以编写一个简单的扫描仪来查找哪个处于活动状态。但这需要一些时间。

于 2012-08-07T05:47:03.940 回答
3

感谢上面的“Swim N Swim”。我在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 之后进行 tether 时,都必须在 PC 上启动 apache 或其他进程才能使新 IP 生效。这就是我所经历的。

于 2016-04-19T07:35:27.593 回答