【问题标题】:How to get the system ip address after usb tethering of android phone?安卓手机usb绑定后如何获取系统ip地址?
【发布时间】:2012-07-15 09:50:24
【问题描述】:


我正在用 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 服务。
android 手机通过 USB 连接到运行 windows 服务的系统。系统假设 android 手机是调制解调器,并为系统生成额外的 IP 地址。这个 ip 地址是在 android 手机连接时动态生成的。
对于通过套接字将数据从移动设备传输到系统。我需要在我的 android 编码中提供系统的 IP 地址(绑定后)。
如果android编码中有任何方法可以获取此IP地址。
请大家就这件事发表你的想法。

【问题讨论】:

  • 您想要哪个“系统”的 IP 地址?请记住,您应该考虑 IP 地址是相对于其他“系统”的。网络共享时,链中的任何设备都可能存在多个 IP 地址 - 内部和外部 IP。你想用你想找到的 IP 地址做什么?
  • 亲爱的 mbanzon,我想通过 android 中的套接字连接在移动设备和系统(tithered)之间传输数据。
  • 我认为手机和电脑之间的USB连接不允许任何插座连接。在我看来,您应该忽略网络共享部分 - 而是研究如何使用 Android 进行 USB 传输。解决方案将取决于您要传输的内容以及您正在制作的应用程序类型。也许通过挂载的 USB 存储进行简单的文件传输就足够了?

标签: android networking usb mobile-application android-1.6-donut


【解决方案1】:

网络共享后,无法从 android 中找到在 PC 中创建的 IP 地址。没有 API 或其他方法可以找到它。

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

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

【讨论】:

  • 或者干脆使用 /proc/net/arp :)
【解决方案2】:

感谢上面的“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 生效。这就是我所经历的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 2010-12-15
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多