Android ищет сервер автоматически - PullRequest
1 голос
/ 25 февраля 2012

У меня есть приложение для Android, которое (по сети) связывается с приложением для настольного сервера (оба запрограммированы на Java и на основе GUI). Сейчас, чтобы проверить, у меня просто есть способ указать гнездо на телефоне Android. Однако в будущем, когда я выпущу приложение, я хочу, чтобы оно могло самостоятельно пытаться подключиться к серверу.

Некоторые идеи, которые у меня были до сих пор, - это получить IP-адрес телефона, а затем перебрать адресное пространство класса C на том же порту и посмотреть, подключаются ли какие-либо из этих сокетов. Ребята, есть что-нибудь еще, что вы можете предложить?

Кроме того, как лучше всего получить IP-адрес телефона в Android? У меня есть способ, но он работает только на Android 2.3 и ниже ... на ICS он полностью проваливается и дает случайную тарабарщину. Вот оно:

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().toString();
                }
            }
        }
    } catch (Exception ex) {
    }
    return null;
}

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

Циклы по сети C-класса излишне излишни. Я бы не использовал это, если бы не было крайней мерой. У вашего пользователя может быть сеть класса A (10.x.x.x, популярная на рабочих местах) или класс B, потому что ... ему так нравится; -)

Лучшим способом было бы использовать широковещательный адрес (или многоадресную рассылку, если вы предпочитаете, но это немного больше работы). Вы можете реализовать простой протокол обнаружения для своего приложения на основе дейтаграмм UDP. В этом случае ваш сервер прослушивает широковещательный порт, например, UDP 192.168.0.255:6666 (порт по вашему выбору), и отвечает на любое действие, отправляя IP: PORT, который он слушает, запрашивающей стороне.

Phone->Broadcast: "Is there anybody?"
Server1->Phone  : "I am here. Talk to me at 192.168.0.123:6666"
Server2->Phone  : "I am here. Talk to me at 192.168.0.124:6666"

Клиент может затем отобразить доступные серверы и спросить, к какому из них пользователь хочет подключиться, затем подключиться к TCP-порту, указанному в ответе (я предполагаю, что соединение клиент-сервер - это TCP, но это может быть что угодно, идея та же ).

0 голосов
/ 26 февраля 2012

Технология, которую вы ищете: сеть с нулевой конфигурацией , и, к счастью, уже есть некоторые сторонние библиотеки Java с открытым исходным кодом, поэтому вам не нужно создавать свои собственные с нуля.Я рекомендую JmDNS , которые поддерживают как Java, так и Android, я использую его в своем собственном приложении для Android, и он работает довольно хорошо.

Сеть с нулевой конфигурацией уже широко используется во многих клиентских приложениях для серверов-клиентов, проверьте мой ответ здесь для примера кода.

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