Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить IP в апплете? Показывает 127.0.0.1 вместо реального. 
V
    Опции темы
Real McCoy
  Дата 26.11.2007, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 28.6.2007

Репутация: нет
Всего: 2



Здравствуйте все!

Появилась необходимость получать IP или имя машины, на которой запущен апплет. Воспользовался следующим кодом, который нашёл в этом форуме:
Код

    try
    {
      java.net.InetAddress localhost = java.net.InetAddress.getLocalHost();
      System.err.println(localhost.getHostAddress());
      System.err.println(localhost.getHostName());
    }
    catch(java.net.UnknownHostException ex)
    {
      System.err.println("ERROR: " + ex.toString());
    }


Так вот, когда я запускаю апплет в NetBeans'е или просто открываю страничку с апплетом в браузере, то получаю IP типа 192.168.1.х, что меня устраивает, и имя компа. Если же я загружаю страничку с апплетом с локального или удалённого веб-сервера, то получаю 127.0.0.1 и localhost. Почему и как это победить?

Спасибо!
PM MAIL   Вверх
skhilkov
Дата 26.11.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 371
Регистрация: 11.4.2006
Где: TOMSK

Репутация: 1
Всего: 7



Real McCoy,  попробуй InetAddress.getAllByName('localhost')... пробежишься по результатам и возьмешь getAddress() у каждого.

Добавлено через 8 минут и 5 секунд
Хотя... так не получится....


--------------------
Кто понял жизнь, тот не спешит. 
PM MAIL   Вверх
skhilkov
Дата 26.11.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 371
Регистрация: 11.4.2006
Где: TOMSK

Репутация: 1
Всего: 7



Для сети можно вот так попробовать: 

Код

try {
            Enumeration en =  NetworkInterface.getNetworkInterfaces();
            while(en.hasMoreElements())
            {
                NetworkInterface cur = (NetworkInterface) en.nextElement(); 
                System.out.println();
                Enumeration addrss = cur.getInetAddresses();
                while(addrss.hasMoreElements())
                {
                    InetAddress ia = (InetAddress) addrss.nextElement();
                    System.out.println(ia.getHostAddress());                    
                }
            }
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



--------------------
Кто понял жизнь, тот не спешит. 
PM MAIL   Вверх
Real McCoy
Дата 26.11.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 28.6.2007

Репутация: нет
Всего: 2



skhilkov
Спасибо, но пока с тем же результатом: если запускаю апплет локально или открываю его страницу с диска в браузере, то получаю список из двух адресов:
127.0.0.1
192.168.1.2

если же открываю его с локального или удалённого веб-сервера, то получаю только 127.0.0.1 :(

Это сообщение отредактировал(а) Real McCoy - 26.11.2007, 15:58
PM MAIL   Вверх
Kangaroo
Дата 26.11.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: нет
Всего: 104



Real McCoy
вот тред на форуме сана. Там в конце и код приводится, говорят работает. Пробуй и нам расскажешь.

Это сообщение отредактировал(а) Kangaroo - 26.11.2007, 17:22


--------------------
Lost....
PM MAIL MSN   Вверх
Real McCoy
Дата 26.11.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 28.6.2007

Репутация: нет
Всего: 2



Kangaroo
Спасибо!

Я тут уже сам кое-что на копал, но то, что прислали Вы, тоже впрок пошло - так сказать, кругозор расширить помогло smile

Итак, по результатам исследований, вот какой апплет у меня получился как синтез двух:
Код

public class GetID extends java.applet.Applet 
{
    private java.awt.TextArea text;

    public GetID()
    {
        setLayout(new java.awt.BorderLayout());
        text = new java.awt.TextArea();
        add("Center", text);
        text.setEditable(false);
    }

    public void init() 
    {
        String name = getDocumentBase().getHost();
        int port = getDocumentBase().getPort();

        if( port == -1 )
            port = 80;

        String ip = "unknown";
    
        try
        {
          java.net.Socket connection = new java.net.Socket(name, port);
        }
        catch(Exception e)
        { 
        }

        try 
        {
            java.net.Socket connection = new java.net.Socket(name, port);

            // Вот это name у меня всегда совпадает с локальным IP клиента (192.168.1.2, например).
            name = connection.getLocalAddress().getHostName();
            // Этот ip - адрес хоста, с которого грузится апплет.
            ip  =  connection.getInetAddress().getHostAddress();
            port = connection.getLocalPort();

            String oldId = "Client ID - " + name + " (" + ip + ":" + port + ")\n";
            System.err.println(oldId);

            // Ещё один вариант получения локального IP.
            String client = connection.getLocalAddress().getHostAddress();

            text.setText(oldId + "Client - " + client + ";\n");
            System.err.println("Client - " + client + ";\n");
        } 
        catch(Exception e) 
        { 
        }
    }
}

Этот апплет даёт правильный результат, если лежит на удалённом веб-сервере в интернете или на веб-сервере в локалке (но не на моей же машине). Показывает 127.0.0.1 и localhost, если лежит на Апаче у меня на машине (и ч неё же запрашивается).

Кстати, сейчас только подумал: может быть у себя я получаю 127.0.0.1 потому, что в %WINDIR%\system32\drivers\etc\hosts и прописано, что 
Код

127.0.0.1    mywebserver

а я делаю запросы именно к нему?

В любом случае, проблема в целом решена. Всем спасибо! Буду рад, если кому-то вышенаписанное окажется полезным, и буду не менее рад, если кто-то добавит подробностей по теме smile

P.S. апплет выложен по адресу http://momentum.110mb.com/jtest/getid.html можно тестить smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Апплеты | Следующая тема »


 




[ Время генерации скрипта: 0.0727 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.