2010-02-19 20 views
8

Cihazda internet erişimini kontrol etmek için requestRouteToHost işlevini kullanıyorum, ancak ikinci argümanın tamsayı türü var - ne koymak zorundayım? IP'nin [1] işlevi gibi yaptığı bir bakış açısı mı? Varsayılan android işlevlerini kullanarak daha basit bir yol olduğunu düşünüyorum. Biri bana söyleyebilir mi?requestRouteToHost IP argümanı

[1] ->

public static Long ipToInt(String addr) { 
     String[] addrArray = addr.split("\\."); 

     long num = 0; 
     for (int i=0;i<addrArray.length;i++) { 
      int power = 3-i; 

      num += ((Integer.parseInt(addrArray[i])%256 * Math.pow(256,power))); 
     } 
     return num; 
    } 

teşekkür ederiz.

cevap

9

Android'de bir String IP adresini bir int'ye dönüştürmek için bir yöntem olsa da, SDK'nın bir parçası değildir. İşte uygulama:

public static int lookupHost(String hostname) { 
    InetAddress inetAddress; 
    try { 
     inetAddress = InetAddress.getByName(hostname); 
    } catch (UnknownHostException e) { 
     return -1; 
    } 
    byte[] addrBytes; 
    int addr; 
    addrBytes = inetAddress.getAddress(); 
    addr = ((addrBytes[3] & 0xff) << 24) 
      | ((addrBytes[2] & 0xff) << 16) 
      | ((addrBytes[1] & 0xff) << 8) 
      | (addrBytes[0] & 0xff); 
    return addr; 
} 
+0

Bu cevap doğru! (+1) Peki ya IPv6? – TacB0sS

+1

@ TacB0sS Android Dokümantasyondan Bir İnternet Protokolü (IP) adresi. Bu bir IPv4 adresi veya bir IPv6 adresi olabilir ve pratikte Inet4Address veya Inet6Address'in bir örneğiniz olur (bu sınıf doğrudan örneklenemez). 'Çoğu kod iki aile arasında ayrım yapmak zorunda değildir ve InetAddress'i kullanmalıdır ' –

+0

Yani addrBytes = inetAddress.getAddress(); 6 bayt dizisi döndürmez mi? – TacB0sS