Как создать объект InetAddress в Android? - PullRequest
1 голос
/ 20 марта 2011

HI!

Я пишу код, который будет работать в Android.Я хочу получить IP-адрес моего компьютера, т.е. подключенного к той же сети.т.е. мой телефон подключен через Wi-Fi, а компьютер подключен через кабель Ethernet к тому же маршрутизатору.Я могу пропинговать свой компьютер со своего телефона и наоборот, но не могу получить IP-адрес или имя хоста моего компьютера через код.

Я использую этот

InetAddress inet = InetAddress.getByName( "192.168.0.102");

Я получаю сообщение о недоступности сети.

Пожалуйста, помогите, так как я застрял в нем очень долго.Спасибо и всего наилучшего

Фас

1 Ответ

3 голосов
/ 28 июня 2011

Вы можете попробовать преобразовать строку IP в целое число, а затем создать объект InetAddress из байтов, содержащих IP-адрес. Вот код

InetAddress inet = intToInetAddress(ipStringToInt( "192.168.0.102"));

public static int ipStringToInt(String str) {
     int result = 0;
     String[] array = str.split("\\.");
     if (array.length != 4) return 0;
     try {
         result = Integer.parseInt(array[3]);
         result = (result << 8) + Integer.parseInt(array[2]);
         result = (result << 8) + Integer.parseInt(array[1]);
         result = (result << 8) + Integer.parseInt(array[0]);
     } catch (NumberFormatException e) {
         return 0;
     }
     return result;
 }

public static InetAddress intToInetAddress(int hostAddress) {
    InetAddress inetAddress;
    byte[] addressBytes = { (byte)(0xff & hostAddress),
                            (byte)(0xff & (hostAddress >> 8)),
                            (byte)(0xff & (hostAddress >> 16)),
                            (byte)(0xff & (hostAddress >> 24)) };

    try {
       inetAddress = InetAddress.getByAddress(addressBytes);
    } catch(UnknownHostException e) {
       return null;
    }
    return inetAddress;
}
...