русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Теги. Пересылка параметров в апплеты. Методы и интерфейсы в апплетах


Дата добавления: 2015-06-12; просмотров: 617; Нарушение авторских прав


Тег <applet> используется для запуска апплета как из HTML-документа, так и из программы appletviewer. Программа appletviewer выполняет каждый найденный ей тег <applet> в отдельном окне, в то время как браузеры позволяют разместить на одной странице несколько апплетов. Синтаксис тэга <APPLET> в настоящее время таков :
<APPLET>

CODE = appletFile
OBJECT = appletSerialFile
WIDTH = pixels
HEIGHT = pixels
[ARCHIVE = jarFiles]
[CODEBASE = codebaseURL]
[ALT = alternateText]
[NAME = appletInstanceName]
[ALIGN = alignment]
[VSPACE = pixels]
[HSPACE = pixels]
>
[< PARAM NAME = AttributeNamel VALUE = AttributeValuel >]
[< PARAM NAME = AttributeName2 VALUE = AttributeValue2 >]
[HTML-текст, отображаемый при отсутствии поддержки Java]
</APPLET>

getParameter(String)


Метод getParameter возвращает значение типа String, соответствующее указанному имени параметра. Если вам в качестве параметра требуется значение какого-либо другого типа, вы должны преобразовать строку-параметр самостоятельно. Вы сейчас увидите некоторые примеры использования метода getParameter для извлечения параметров из приведенного ниже примера:
<applet code=Testing width=40 height=40>
<param name=fontName value=Univers>
<param name=fontSize value=14>
<param name=leading value=2>
<param name=accountEnabled value=true>
Ниже показано, как извлекается каждый из этих параметров:
String FontName = getParameter("fontName");
String FontSize = Integer.parseInt(getParameter("fontSize"));
String Leading = Float.valueOf(getParameter("leading"));
String PaidUp = Boolean.valueOf(getParameter("accountEnabled"));
Контекст апплета
getDocumentBase и getCodeBase

Возможно, Вы будете писать апплеты, которым понадобится явно загружать данные и текст. Java позволяет апплету загружать данные из каталога, в котором располагается HTML-документ, запустивший апплет (база документа - getDocumentBase), и из каталога, из которого был загружен class-файл с кодом апплета (база кода - getCodeBase).



Интерфейс AppletContextДоступ к этому интерфейсу из апплета предоставляется методом getAppletContext. С его помощью апплет может взаимодействовать со страницей, откуда он был загружен, и с браузером. Так, именно в этом интерфейсе определен метод getApplet, с помощью которого можно обратиться по имени к другому апплету, находящемуся на той же странице.Метод showStatus меняет текст поля статуса в окне браузера.Метод showDocument позволяет загрузить новую страницу в браузер.

 

 

84.

Пример рисования апплетов

//подключаем библиотеки
import java.applet.*;
import java.awt.*;
//объявляем новый класс
public class Body extends Applet{
public void paint(Graphics g)
{ int yDraw;
//Очищаем область.
g.clearRect(0, 0, 100,100);
//Выбираем цвет.
g.setColor(Color.yellow);
// Рисуем закрашенный прямоугольник.
g.fillRect(0, 0, 100, 100);
//Выбираем цвет.
g.setColor(Color.black);
//Рисуем прямоугольник.
g.drawRect(0, 0, 10,10);
//Рисуем прямую линию.
g.drawLine(0,0,100,100) ;
} }

 

89.

Пример клиент-серверной программы.Машина, которая стоит в одном месте, называется сервером, а машина, которая ищет, называется клиентом. Это различие важно лишь до тех пор, пока клиент пробует соединится с сервером. Как только они соединятся, они становятся двумя сторонами коммуникационного процесса и более не имеет значения, какая машина принимала роль сервера, а какая принимала роль клиента.Таким образом, работа сервера состоит в прослушивании соединения, она выполняется с помощью специального объекта, который вы создаете. Этот пример покажет простейшее использование серверного и клиентского сокета. Все, что делает сервер, это ожидает соединения, затем использует сокет, полученный при соединении, для создания InputStream'а и OutputStream'а. Они конвертируются в Reader и Writer, которые оборачиваются в BufferedReader и PrintWriter. После этого все, что будет прочитано из BufferedReader'а будет переправлено в PrintWriter, пока не будет получена строка "END", означающая, что пришло время закрыть соединение.Клиент создает соединение с сервером, затем создает OutputStream и создает некоторую обертку, как и в сервере. Строки текста посылаются через полученный PrintWriter. Клиент также создает InputStream (опять таки, с соответствующей конвертацией и оберткой), чтобы слушать, что говорит сервер .Вот сервер:

//: c15:JabberServer.java
// Очень простой сервер, который просто отсылает
// назад все, что посылает клиент.
// {RunByHand}
import java.io.*;

import java.net.*;
publicclass JabberServer {
// Выбираем порт вне пределов 1-1024:
publicstaticfinal int PORT = 8080;
publicstatic void main(String[] args) throws IOException {
ServerSocket s = new ServerSocket(PORT);
System.out.println("Started: " + s);
try {
// Блокирует до тех пор, пока не возникнет соединение:
Socketsocket = s.accept();
try {
System.out.println("Connectionaccepted: " + socket);
BufferedReaderin = new BufferedReader(new InputStreamReader(
socket.getInputStream()));

// Вывод автоматически выталкивается из буфера PrintWriter'ом
PrintWriterout = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
while (true) {
Stringstr = in.readLine();
if (str.equals("END"))
break;
System.out.println("Echoing: " + str);
out.println(str);
}
// Всегда закрываем два сокета...
}
finally {
System.out.println("closing...");
socket.close();
}
}
finally {
s.close();
}
}
} // /:~

Вотклиент:

//: c15:JabberClient.java
// Оченьпростойклиент, которыйпростопосылает
// строкинасерверичитаетстроки,
// посылаемыесервером.
// {RunByHand}
import java.net.*;
import java.io.*;
public class JabberClient {
public static void main(String[] args) throws IOException {
// Передаем null вgetByName(), получая
// специальный IP адрес "локальнойзаглушки"
// длятестированиянамашинебезсети:
InetAddressaddr = InetAddress.getByName(null);
// Альтернативно, выможетеиспользовать
// адресилиимя:
// InetAddressaddr =
// InetAddress.getByName("127.0.0.1");
// InetAddressaddr =
// InetAddress.getByName("localhost");
System.out.println("addr = " + addr);
Socket socket = new Socket(addr, JabberServer.PORT);
// Помещаемвсевблок try-finally, чтобы
// бытьуверенным, чтосокетзакроется:
try {
System.out.println("socket = " + socket);

BufferedReader in = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
// Выводавтоматически Output быталкиваетсяPrintWriter'ом.
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
for (int i = 0; i< 10; i++) {
out.println("howdy " + i);
String str = in.readLine();
System.out.println(str);
}
out.println("END");
}
finally {
System.out.println("closing...");
socket.close();
}
}
} // /:~

 

 

90.

Создание клиент-серверной программы с помощью дейтаграмм.Необходимые средства поддержки протокола UDP находятся в пакете java.net. Для создания дейтаграмм в Java существует классDatagramPacket. При получении дейтаграммы по протоколу UDP класс DatagramPacket используется также для чтения данных, адреса отправителя и метаинформации.
Чтобы создать дейтаграмму для отправки на удаленную машину, используется следующий конструктор:publicDatagramPacket(byte[] ibuf, int length, InetAddressiaddr, intiport);Здесь ibuf − массив байт, содержащий кодированное сообщение; length − количество байт, которое должно быть помещено в пакет, что определяет размер дейтаграммы; iaddr − это экземпляр класса InetAddress, который хранит IP-адрес получателя; iport указывает номер порта, на который посылается дейтаграмма.
Чтобы получить дейтаграмму, необходимо использовать другой конструктор для объекта DatagramPacket, в котором будут находиться принятые данные. Прототип конструктора имеет вид:publicDatagramPacket(byte[] ibuf, intlength);Дейтаграммы не ограничены определенной длиной; можно создавать как очень длинные, так и очень короткие дейтаграммы. Заметим, однако, что между клиентом и сервером должно существовать соглашение о длине дейтаграмм, поскольку они оба должны создать массив байт нужного размера перед созданием объекта DatagramPacket для посылки или получения дейтаграммы.Когда дейтаграмма получена, как будет продемонстрировано ниже, можно прочитать ее данные. Другие методы позволяют получить метаинформацию, относящуюся к сообщению:

 

publicintgetLength(); – возвращает количество байт, из которых состоят данные дейтаграммы;

publicbyte[] getData(); – позволяет получить массив, содержащий эти данные;

publicInetAddressgetAddress(); – возвращает адрес отправителя;

publicintgetPort(); – возвращает номер порта UDP, используемый отправителем.

Отправка и получение дейтаграмм осуществляется при помощи класса DatagramSocket, который создает сокет UDP. У него есть два конструктора, один из которых позволяет системе назначить любой из свободных портов UDP. Другой дает возможность задать конкретный порт, что полезно при разработке сервера. Как и для портов ТСР, в большинстве операционных систем порты с номерами меньше 1024 доступны только процессам с привилегиями суперпользователя.Рассмотрим пример, реализующий приложение клиент/сервер с использованием UDP сокетов.
Листинг приложения сервера:

import java.net.*;
import java.io.*;
publicclassUDPServer {
publicfinalstaticint DEFAULT_PORT = 8001;//определение порта
//сервера
publicfinalString VERSION_CMD = "VERS";//определение версии
//команды
publicfinalString QUIT_CMD = "QUIT";//определение
//команды «выход»
publicfinalbyte[] VERSION = { 'V', '2', '.', '0' };//создание массива
//для определения версии сервера
publicfinalbyte[] UNKNOWN_CMD = { 'U', 'n', 'k', 'n', 'o', 'w', 'n', ' ',
'c', 'o', 'm', 'm', 'a', 'n', 'd' };//неизвестная команда
publicvoidrunServer() throwsIOException {//метод сервера runServer
DatagramSocket s = null;//создание объекта DatagramSocket
try {
booleanstopFlag = false;//создание флага stopFlag и его инициализация
//значением false
byte[] buf = newbyte[512];//буфер для приема/передачи дейтаграммы
s = newDatagramSocket(DEFAULT_PORT);//привязка сокета к
//реальному объекту с портом DEFAULT_PORT
System.out.println("UDPServer: Startedon " + s.getLocalAddress() + ":"
+ s.getLocalPort());//вывод к консоль сообщения
while(!stopFlag) {//цикл до тех пор, пока флаг не примет значение true
DatagramPacketrecvPacket = newDatagramPacket(buf, buf.length);
//создание объекта дейтаграммы для получения данных

s.receive(recvPacket);//помещение полученного содержимого в
//объект дейтаграммы
Stringcmd = newString(recvPacket.getData()).trim();//извлечение
//команды из пакета
System.out.println("UDPServer: Command: " + cmd);
DatagramPacketsendPacket = newDatagramPacket(buf, 0, recvPacket.getAddress(), recvPacket.getPort());
//формирование объекта
// дейтаграммы для отсылки данных

int n = 0;//количество байт в ответе
if (cmd.equals(VERSION_CMD)) {//проверка версии команды
n = VERSION.length;
System.arraycopy(VERSION, 0, buf, 0, n);
}
elseif (cmd.equals(QUIT_CMD)) {
stopFlag = true;//остановка сервера
continue;
}
else {
n = UNKNOWN_CMD.length;
System.arraycopy(UNKNOWN_CMD, 0, buf, 0, n);
}
sendPacket.setData(buf);//установить массив посылаемых данных
sendPacket.setLength(n);//установить длину посылаемых данных
s.send(sendPacket);//послать сами данные
} // while(serverisnotstopped)
System.out.println("UDPServer: Stopped");
}
finally {
if (s != null) {
s.close();//закрытие сокета сервера
}
}
}
publicstaticvoidmain(String[] args) {//метод main
try {
UDPServerudpSvr = newUDPServer();//создание объекта udpSvr
udpSvr.runServer();//вызов метода объекта runServer
}
catch(IOExceptionex) {
ex.printStackTrace();
}
}
}

Листинг приложения клиента:

import java.net.*;
import java.io.*;
publicclassUDPClient {//описание класса клиента
publicvoidrunClient() throwsIOException {//метод клиента runClient
DatagramSocket s = null;//создание дейтаграммы
try {
byte[] buf = newbyte[512]; //буфер для приема/передачи дейтаграммы
s = newDatagramSocket();//привязка сокета к реальному объету
System.out.println("UDPClient: Started");
byte[] verCmd = { 'V', 'E', 'R', 'S' };
DatagramPacketsendPacket = newDatagramPacket(verCmd, verCmd.length, InetAddress.getByName("127.0.0.1"), 8001);
//создание
//дейтаграммы для отсылки данных
s.send(sendPacket);//посылка дейтаграммы
DatagramPacketrecvPacket = newDatagramPacket(buf, buf.length);//создание дейтаграммы для получения данных
s.receive(recvPacket);//получение дейтаграммы
Stringversion = newString(recvPacket.getData()).trim();//извлечение
//данных (версии сервера)
System.out.println("UDPClient: ServerVersion: " + version);
byte[] quitCmd = { 'Q', 'U', 'I', 'T' };
sendPacket.setData(quitCmd);//установить массив посылаемых данных
sendPacket.setLength(quitCmd.length);//установить длину посылаемых
// данных
s.send(sendPacket); //послать данные серверу
System.out.println("UDPClient: Ended");
}
finally {
if (s != null) {
s.close();//закрытие сокета клиента
} } }
publicstaticvoidmain(String[] args) {//метод main
try {
UDPClientclient = newUDPClient();//создание объекта client
client.runClient();//вызов метода объекта client
}
catch(IOExceptionex) {
ex.printStackTrace();
}
}
}

Вначале запустите сервер, затем клиент. В результате на сервере появятся строки:

UDPServer: Startedon 0.0.0.0/0.0.0.0:8001
UDPServer: Command: VERS
UDPServer: Command: QUIT
UDPServer: Stopped

На клиенте появятся строки:

UDPClient: Started
UDPClient: ServerVersion: V2.0
UDPClient: Ended

 

 



<== предыдущая лекция | следующая лекция ==>
Простые методы отображения апплетов. Перерисовка. Использования окна состояния | Introduction


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.951 сек.