2013-07-22 95 views
4

嗨,我是新的android編程。我基本上試圖連接到接入點併發送命令。通過wifi連接到它後,是否可以通過編程方式獲得它的IP地址,以便我可以建立一個http連接? 到目前爲止,我知道我們可以獲取設備IP,但不知道是否可以獲取接入點IP。請幫忙。提前致謝。我可以通過wifi連接到接入點的IP地址嗎?

+0

的可能重複[是否WiFi接入點有一個IP地址?(http://stackoverflow.com/questions/4929438/does -wifi-access-points-have-an-ip-address) – kabuko

+0

從這個副本中不清楚你所問的甚至是有意義的。 – EJP

+0

@kabuko我指的接入點確實分配了一個IP地址。我可以ping通並連接到它。我的問題是,如果有可能從android應用程序獲得這個IP。此外,重複的帖子不回答這個問題。 – user2597333

回答

0

我假設你指的是設備連接到的接入點的外部(公共)IP地址。如果是這樣,是的,有一種簡單的方法來獲取設備連接到的接入點的公共IP地址。只需在Web服務器上設置一個腳本,該腳本將回顯連接到它的任何客戶端的IP地址(類似於www.whatismyip.com)。然後,您的設備只需要對腳本執行GET請求,這將返回設備連接到的接入點的外部IP。

+0

謝謝,但不幸的是,我將無法訪問任何其他Web服務器。這需要是一個獨立的Android應用程序,它只與它所連接的接入點進行交互。另外,通過接入點的IP,我的意思是由可用於AP的DHCP代理分配給它的IP。 – user2597333

0

我使用該工具來獲取IP地址

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(); 
         if (!inetAddress.isLoopbackAddress()) 
         { 
         //My IP address 
           String Ip= inetAddress.getHostAddress().toString(); 

         } 
         } 
        } 

      } 
    catch (SocketException e) 
    { 
     Log.e("Error occurred ", e.toString()); 
     } 
+3

這是完美的代碼,但我不認爲它會工作無線 – 2013-07-23 06:08:14

+0

謝謝Gaurav。上面的代碼在連接到wifi時會返回一個ipv6地址。所以我無法檢查這是否是正確的地址。我也試過包括if(!inetAddress.isLoopbackAddress()&&(inetAddress instanceof Inet4Address)),但是我又沒有得到任何IPv4地址。我連接的AP確實有IPv4地址,我可以從子網內ping它。但這並不是一回事。 – user2597333

3
public static String getApIpAddr(Context context) { 
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    DhcpInfo dhcpInfo = wifiManager.getDhcpInfo(); 
    byte[] ipAddress = convert2Bytes(dhcpInfo.serverAddress); 
    try { 
     String apIpAddr = InetAddress.getByAddress(ipAddress).getHostAddress(); 
     return apIpAddr; 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

private static byte[] convert2Bytes(int hostAddress) { 
    byte[] addressBytes = { (byte)(0xff & hostAddress), 
      (byte)(0xff & (hostAddress >> 8)), 
      (byte)(0xff & (hostAddress >> 16)), 
      (byte)(0xff & (hostAddress >> 24)) }; 
    return addressBytes; 
} 
相關問題