Перевод на русский © Сергей Миссан, 2000
Оригинал статьи опубликован на сайте Javable.com
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(). В этом методе вы можете читать данные и отсылать их клиенту.
Reprinted with permission from the March 2000 edition of JavaWorld magazine.
Copyright © ITworld.com, Inc., an IDG Communications company.
View the original article at: http://www.javaworld.com/javaworld/javaqa/1999-12/02-qa-firewall.html
Назад | Содержание | Вперед