Как получить мой IP-адрес?

У меня есть serverSocket, и я хотел бы знать IP-адрес, но с

listenSocket.getInetAddress().toString();

Я получаю 0.0.0.0. Как я могу получить IP-адрес или (если включены два соединения) одно из них?

3 ответа

Решение

Я использовал это в прошлом:

public String getLocalIpAddress() {
    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()) {
                    return inetAddress.getHostAddress();
                }
            }
        }
    } catch (SocketException ex) {
        Log.e(LOG_TAG, ex.toString());
    }
    return null;
}

Источник: http://www.droidnova.com/get-the-ip-address-of-your-device,304.html

Пожалуйста, проверьте это. Как получить IP-адрес устройства из кода? получение ipaddress требует следующей проверки также InetAddressUtils.isIPv4Address(sAddr);

Если вы получаете 0.0.0.0, это, вероятно, потому что ваш прослушивающий сокет принимает соединения на всех интерфейсах машины. Обычно их будет как минимум два - один для связи с внешним миром и интерфейс localhost / loopback. Поэтому не имеет смысла просить один адрес для него.

Как только вы примете входящее соединение, вы можете задать ему адрес конкретного интерфейса, который его обрабатывает.

Быстрый способ найти "хороший" IP-адрес состоит в том, чтобы установить исходящее соединение с известным сайтом и запросить адрес его локального конца после подключения. Это несколько более переносимо, чем перечисление сетевых интерфейсов (если вы заботитесь о таком вещи), но, конечно, требует, чтобы у вас было что-то, с чем вы могли бы связать то, чему вы доверяете, чтобы быть живым и доступным

Другие вопросы по тегам