Android - получить IP-адрес моего хоста точки доступа

Я пытаюсь подключить 2 устройства через сокеты, чтобы они могли обмениваться данными. Они также подключены через точку доступа Wi-Fi. Я использую Сервисы.

Устройство 1 — это точка доступа (где реализован ServerSocket), Устройство 2 — тот, кто к нему подключается (где реализован Socket). Я провел небольшое исследование и смог получить IP-адрес каждого из них (но рассчитанный по их собственному классу). Но для того, чтобы создать клиентский сокет, мне нужен IP-адрес хоста (телефона, который работает как точка доступа) в другом классе. Я не могу получить его на стороне сервера, потому что эта часть кода не будет выполняться, так как я использую один телефон для создания сети точки доступа, а другой для подключения к ней.

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

Итак, как я могу получить IP-адрес сервера (узла точки доступа) в службе клиента (телефон, подключенный к этой точке доступа)?


person Filipe Gonçalves    schedule 03.08.2016    source источник
comment
Как вы определяете ip клиента на клиенте?   -  person greenapps    schedule 03.08.2016
comment
stackoverflow.com/ вопросы/5387036/   -  person greenapps    schedule 03.08.2016
comment
Чтобы получить IP-адрес клиента на клиенте, я использовал getHostAddress() из inetAddress. Я бы получил список информации о сети, а затем я бы получил inetaddress для каждой из этих сетевых конфигураций, а затем вызвал getHostAddress() для объекта, который не был петлевым адресом. Что-то похожее на это: stackoverflow.com/a/10199498/6634292   -  person Filipe Gonçalves    schedule 03.08.2016


Ответы (2)


Определяем ip шлюза. Программное получение сведений о шлюзе и маске подсети. Используйте WifiManager.getDhcpInfo().gateway .

person greenapps    schedule 03.08.2016

На стороне клиента вы можете использовать dhcp.gateway, чтобы получить IP-адрес на стороне сервера (тот, кто создал точку доступа).

 private final WifiManager manager;
 private final DhcpInfo dhcp;
 private InetAddress getServerIP() {
    manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    dhcp = manager.getDhcpInfo();
    final String address = Formatter.formatIpAddress(dhcp.gateway);// gateway - 
    default gateway IP address
    InetAddress serverIP = null;
    try {
        serverIP  = InetAddress.getByName(address);
        if(mDebug)
        Log.i("Server IP ","" + serverIP.toString());


    } catch (Exception e) {
        if(mDebug)
        Log.e("Cannot find server's IP. Error  ","" + e.toString());
    }

    return serverIP ;
}
person Raza    schedule 03.10.2018