Java Q&A




Firewall tunneling


Перевод на русский © , 2000

Java Q&A

Как мне соединиться с моим Java сервером через HTTP когда клиент находится за proxy/firewall? Я пробовал такое с апплетом, но он выдает в числе прочих исключение "host unreachable".

Вы не можете соединится, потому что proxy/firewall клиента предотвращает большинство соединений через сокеты. Большинство файрволов перекрывают любой обмен информацией, кроме HTTP. Это делается для того, чтобы защитить внутренюю инфраструктуру; пользователи по-прежнему могут использовать Веб, но не могут соединится с другими сетевыми приложениями.

Однако, есть способы для соединения ваших Java приложений и серверов через HTTP. Иногда такой прием называют firewall tunneling. Для того, чтобы облегчить себе жизнь, напишите сервлеты для сервера и оберните все клиентские сообщения в HTTP запросы.

На стороне клиента ваш код должен использовать URLConnection для отправки данных на сервер:

//соединится URL url = new URL("http://www.myserver.com/ servlets/myservlet");

URLConnection conn = url.openConnection(); conn.setDoOutput(true); conn.setUseCaches(false); conn.setRequestProperty("Content-Type", "application/octet-stream");

//Открываем output stream и посылаем данные. OutputStream out = conn.getOutputStream(); //В данном случае ничего не выдается в поток, но вы можете это сделать.

out.flush(); out.close();

//Открываем input stream и загружаем данные. InputStream in = conn.getInputStream();

//Здесь вы будете загружать свои данные.

in.close()

На стороне сервера, когда клиент выдает openConnection(), вызывается метод сервлета doPost(). В этом методе вы можете читать данные и отсылать их клиенту.




Содержание