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。這是我所經歷的。