2013-07-22 59 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; 
} 
相关问题