2015-11-27 2 views
2

У меня есть веб-приложение Java, которое должно знать имя компьютера клиентов, подключающихся к нему. Моя первая идея заключалась в том, чтобы получить его с помощью JavaScript и заполнить поле скрытой формы, но после некоторого копания, похоже, JS не может получить доступ к этой информации.Получить имя клиентского компьютера в веб-приложении

Затем я попытался использовать апплет и получить доступ к методам апплетов с помощью JavaScript. Это похоже на Firefox, но более новые версии Chrome не запускают апплеты.

Затем я рассмотрел переход на приложение Java Webstart, которое, насколько мне известно, должно работать в Chrome, но в этом случае, поскольку приложение Webstart работает за пределами браузера, JavaScript не может получить доступ к его методам.

Затем я попытался сохранить имя хоста в среде TEMP-каталога, который работает, в Firefox + Linux + Java7, но не в Firefox + Windows + Java8: апплет просто не запускается, и, кроме того, я не знаю 't нашел способ получить доступ к определенному каталогу TEMP и прочитать файл в JavaScript.

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

Обратите внимание, что мне требуется компьютерное имя хоста, а не то, что IP-адрес компьютера разрешает через DNS.

Спасибо.

ответ

1

Ваше приложение Javawebstartet может принимать слушателя Websocket. Таким образом, вы можете получить доступ к этому приложению через Websocket из javascript. Работает только с HTTP, HTTPS не

На JavaSide использовать реализацию WebSocket из http://java-websocket.org/

В JavaScript Я использую https://code.google.com/p/jquery-websocket/ Вы можете найти примеры там. Связь в сети - асинхронная. Создание WS с помощью метода обратного вызова для ответа

var ws = $.websocket("ws://127.0.0.1:" + lport + "/", { 
      events: { 
       say: function (e) { 
        //showMsg(e.data); 

       } 
      } 
     }); 

и вызовите сервер с

ws.send(0, jsonData) 
+0

Звучит неплохо, позвольте мне попробовать. – Level15

+0

Вам нужны образцы кода? Я должен иметь некоторые в java/android, C# a JS –

+0

Да, спасибо, Доминик, это было бы полезно! – Level15

0

если у вас есть IP добавить вы можете сделать:

InetAddress inetAddress =InetAddress.getByName("127.64.84.2");//get the host Inet using ip 
System.out.println ("Host Name: "+ inetAddress.getHostName());//display the host 
+0

Привет: Спасибо, но это не сработает; Мне нужно имя компьютера, определяемое компьютером, а не разрешаемое DNS-имя узла IP, видимое сервером. – Level15

0

Пробовал сервлет?

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 

    final String hostname = request.getRemoteHost(); // hostname 
    System.out.println("hostname"+hostname); 

    String remoteMachineName = null; 
    String remoteMachineAddress = request.getRemoteAddr(); 
    System.out.println("remoteMachineAddress: " + remoteMachineAddress); 
    try { 
     InetAddress inetAddress = InetAddress.getByName(remoteMachineAddress); 

     remoteMachineName = inetAddress.getHostName(); 
     System.out.println("remoteMachineName: " + remoteMachineName); 
     } 
    } catch (UnknownHostException e) { 

     } 

    System.out.println("remoteMachineName: " + remoteMachineName); 
}  
+0

Привет: Спасибо, но это не работает; Мне нужно имя компьютера, определяемое компьютером, а не разрешаемое DNS-имя узла IP, видимое сервером. – Level15

0

Вы можете использовать InetAddress.getLocalHost().getHostName(), которые не удалось разрешить имя хоста из DNS в соответствии с документацией

0

You не может получить имя компьютера, используя javascript. Javascript не имеет доступа к имени компьютера в качестве причины безопасности