Дополнительные сервисы на web серверах и сокеты в Java апплетах.Автор: Павел Негробов. Иногда возникает необходимость организации какого-нибудь дополнительного сервиса на Web сервере. При этом дополнительный сервер цепляется на какой-нибудь нестандартный порт и прослушивает его. В страничку, которую пользователь получает обычным образом, встраивается апплет, реализующий клиента для этого нестандартного сервера. Такую схему можно реализовать с помощью стандартного механизма сокетов языка Java. Приведем пример реализации стандартного сервиса Time, выдающего клиенту текущее время. Обычно он реализуется на порту 37 и выдает 4 байтовое число, которое затем необходимо раскодировать, чтобы получить текущие дату и время. Мы же реализуем несколько иной механизм. Сервер будет посылать клиенту текущие дату и время в виде обычной строки, пригодной к распечатке без каких-либо перекодировок сразу после подключения и немедленно отключаться. Работать он будет на порту 8013. Полный текст сервера: // TimeServer.java public class TimeServer extends Thread System.out.println("Time Server started ..."); } catch (IOException e) { System.err.println("Error: "+e); System.exit(1); } // catch } // TimeServer public void run() PrintWriter theWriter = new PrintWriter(new
OutputStreamWriter(theClientSocket.getOutputStream())); // разрыв соединения theWriter.close(); public static void main(String[] args) { TimeServer theServer = new TimeServer(); theServer.start(); } // main } // class Приведем теперь текст апплета, обращающегося к этому серверу и HTML, запускающий его. // GetTime.java public class GetTime extends Applet implements ActionListener public void init() setLayout(new BorderLayout()); // ------------------- Panel column1 = new Panel(); // ------------------- Panel buttonbox = new Panel(); buttonbox.setLayout(new FlowLayout(FlowLayout.CENTER, 100, 10)); // Create pushbuttons and add them to the buttonbox Button accept = new Button("GetTime"); buttonbox.add(accept); // ------------------- text = new TextField(30); public void actionPerformed(ActionEvent ev) try // Ожидание поступления сообщения String theLine; int c; while ((theLine = theReader.readLine()) != null) text.setText(theLine); // Разрыв соединения theReader.close(); HTML для запуска этого апплета: <html> <body> Эта технология была проверена на IE 5.x и на Netscape Navigator 4.7. На обоих броузерах она работает. Павел Негробов. Email: pavel@imail.dc.ukrtel.net
|