2010-02-19 18 views
8

Để kiểm tra truy cập internet trên thiết bị, tôi sử dụng hàm requestRouteToHost, nhưng đối số thứ hai của nó có kiểu số nguyên - thứ tôi phải đặt trong đó? Int-view của IP như [1] có hoạt động không? Tôi nghĩ rằng có nhiều cách đơn giản hơn bằng cách sử dụng các chức năng android mặc định. Ai đó có thể cho tôi biết?requestRouteToHost Đối số IP

[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; 
    } 

Cảm ơn.

Trả lời

9

Trong khi có phương pháp trong Android để chuyển đổi địa chỉ IP String thành int, nó không phải là một phần của SDK. Dưới đây là triển khai:

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

Câu trả lời này là đúng! (+1) Nhưng còn IPv6 thì sao? – TacB0sS

+1

@ TacB0sS Từ Tài liệu Android Địa chỉ Giao thức Internet (IP). Đây có thể là địa chỉ IPv4 hoặc địa chỉ IPv6, và trong thực tế bạn sẽ có một cá thể của Inet4Address hoặc Inet6Address (lớp này không thể được khởi tạo trực tiếp). 'Hầu hết mã không cần phân biệt giữa hai họ và nên sử dụng InetAddress.' –

+0

Vì vậy, addrBytes = inetAddress.getAddress(); sẽ không trả về một mảng 6 byte? – TacB0sS