Android - найти сервер в сети - PullRequest
       4

Android - найти сервер в сети

13 голосов
/ 16 декабря 2010

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

1 Ответ

22 голосов
/ 16 декабря 2010

Возможно, вы захотите посмотреть UDP-трансляции, когда ваш сервер объявляет о себе, а телефон прослушивает трансляции.


Существует пример из удаленного проекта Boxee,цитируется ниже.

Получение широковещательного адреса

Вам необходимо получить доступ к диспетчеру wifi, чтобы получить информацию DHCP и построить широковещательный адрес из этого:

InetAddress getBroadcastAddress() throws IOException {
    WifiManager wifi = mContext.getSystemService(Context.WIFI_SERVICE);
    DhcpInfo dhcp = wifi.getDhcpInfo();
    // handle null somehow

    int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
    byte[] quads = new byte[4];
    for (int k = 0; k < 4; k++)
      quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
    return InetAddress.getByAddress(quads);
}

Отправка иПолучение широковещательных пакетов UDP

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

DatagramSocket socket = new DatagramSocket(PORT);
socket.setBroadcast(true);
DatagramPacket packet = new DatagramPacket(data.getBytes(), data.length(),
    getBroadcastAddress(), DISCOVERY_PORT);
socket.send(packet);

byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);

Вы также можете заглянуть в Bonjour / zeroconf, и есть реализация Java это должно работать на Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...