Чтение онлайн

на главную - закладки

Жанры

Шрифт:

import javax.microedition.midlet.MIDlet;

import javax.microedition.Icdui.Display;

import javax.microedition.Icdui.Command;

import javax.microedition.Icdui.CommandListenerj;

import javax.microedition.Icdui.Displayable;

import javax.microedition.Icdui.TextBox;

import javax.microedition.Icdui.TextFie Id;

import javax.microedition.io.Connector;

import javax.microedition.io.Datagram;

import javax.microedition.io.DatagramConnection;

import Java.io.lOException; ft,

Этот класс реализует дейтаграммкого клиента, который соединяется с сервером синхронизирующего сетевого протокола (NTP) через стандартный порт NTP 123.

Для контроля клиента

назначается отдельная нить, поэтому он реализует Runnable. Приложение может осуществлять коммуникации асинхронно из управления его пользовательским интерфейсом.

Обратите внимание, что данный файл представляет только «скелет клиента».

Полная семантика сообщений службы NTP здесь не показана. Цель в том, чтобы просто продемонстрировать структуру клиента с помощью дейтаграмм MIDP.

*/

public class DatagramTest extends MIDlet,

implements CommandListener, Runnable

}

private static final int BUF_SIZE = 1024;

private static Command exit =

new Command ("Exit", Command.EXIT, 1);

private static DatagramTest instance; private Display display;

private TextBox dgramText;

// Дейтаграммное соединение. private DatagramConnection conn;

// Дейтаграмма, которая поддерживает посылку

и получение данных, private Datagram dgram;

// Адрес демона синхронизирующего сетевого протокола (NTP) на

// определенном сервере. NTP использует протокол UDP. private String address = "datagram://srl-usca28-07:123";

/"*

Конструктор No-arg.

*/

public DatagramTest

{

super ; instance = this;

}

/**

Конструктор.

Обратите внимание, что проверок действительности параметра не осуществляется. Если он деформирован, при попытке соединения будет сброшено исключение.

@param service URI дейтаграммной службы, с которой соединяемся.

*/

public DatagramTest(String service)

(

this ;

address = service;

}

/**

Выдает один экземпляр данного класса. Вызов данного метода до создания объекта возвращает нулевой указатель.

@выдает экземпляр данного класса.

*/

public static DatagramTest getlnstance

}

return instance;

{

public void startApp

}

display = Display.getDisplay (this);

dgramText = new TextBox("Datagram contents", null, 2048,

TextField.ANY); dgramText.setCommandListener (this);

display.setCurrent(dgramText); run ;

}

/*

Запускает дейтаграммного клиента.

Открывает соединение со службой дейтаграммы.

Заполняет объект дейтаграммы и посылает его. Получает ответ асинхронно и записывает байты в стандартный результат для демонстрации. Бесшумно перехватывает исключения, связанные с любым соединением.

*/

public void run

}

try int maxLength;

// Откройте клиентское соединение,

conn = (DatagramConnection) Connector.open(address);

maxLength = conn.getMaximumLength;

dgram = conn.newDatagram(maxLength);

// Убедитесь, что указатель для чтения/записи находится в

// начале буфера, так что данные будут переписывать

// буферную память, dgram.reset;

// Заполните дейтаграмму перед посылкой сообщением,

// которое служба дейтаграммы поймет.

// Создайте запрос в дейтаграмме.

**/

// Пошлите только что заполненную дейтаграмму. conn.send(dgram);

// Получите дейтаграмму; ее содержимое помещается в

// указанный объект дейтаграммы. conn.receive(dgram);

// Используйте данный байтовый массив для пересылки содержимого

// ответа сервера более управляемому объекту Java,

// как, например, String. Вы можете затем использовать

//

дейтаграмму для другого события пересылки или получения.

byte [] data = dgram.getData ;

// Извлеките строку ответа. String str = new String (data);

// Проделайте обработку ответа. Здесь он

// просто распечатывается для демонстрации. System.out.println(str);

// Переустановите указатель для чтения/записи для объекта

// дейтаграммы. В следующий раз, когда данные будут записываться

// в буфер дейтаграммы, он перепишет данные последней операции

// по пересылке или получению.

//Это гарантирует, что предыдущие и последующие данные не

// перемешаются в одном буфере и что не будет создано

// испорченных засоренных сообщений.

dgram.reset;

// Продолжайте обработку, возможно, посылая и получая другие

// сообщения сервера.

//….

}

catch (lOException ioe)

(

System.out.println(ioe.getMessage);

loe.printStackTrace;

quit;

}

return;

}

public void pauseApp

{

}

void quit

destroyApp(true); notifyDestroyed; }

public void destroyApp(boolean destroy) }

try }

conn.close ;

}

catch (lOException ioe) ioe.printStackTrace;

public void display!)

Display.getDisplay(this). setCurrent(dgramText);)

public void commandAction(Command c, Displayable d)

{

if (c == exit)

}

quit;

}

}

}

Обратите внимание, что любой из объектов Datagram по умолчанию содержит тот же адрес, что и создающий их объект DatagramConnection. Вы можете изменять адрес дейтаграммы с помощью методов интерфейса Datagram.

Приложение должно поставлять объект Datagram для посылки или получения дейтаграммы. Чтобы послать дейтаграмму, приложение заполняет объект дейтаграммы данными, составляющими сообщение, которое должно быть послано на сервер. Когда приложение получает дейтаграмму, его объект соединения заполняет объект дейтаграммы данными, которые оно получает от посылающего устройства.

Вы можете использовать тот же объект дейтаграммы для посылки и получения нескольких сообщений. Чтобы сделать это, вы должны убедиться, что вы не перепутали данные нескольких сообщений. Перед повторным использованием объекта дейтаграммы для посылки или приема нового сообщения используйте метод Datagram.reset для переустановки указателя чтения/записи буфера.

Объект Datagram имеет буфер, в котором хранятся байты, составляющие сообщение, которое будет послано или получено. Если вы повторно используете объект Datagram, байты, которые были помещены в буфер предыдущей операцией посылки или получения, все еще будут находиться там. Вызов reset устанавливает сдвиг указателя чтения/записи на начало данного буфера и устанавливает длину на 0. Таким образом, вы эффективно переписываете данные любой предыдущей операции, гарантируя, что вы не смешаете байты двух отдельных сообщений.

Соединения coкeтa

Соединения сокета являются последним типом соединений, явно представленных сетевой инфраструктурой MIDP. Реализации MIDP, поддерживающие сокеты, реализуют традиционные сокеты стиля UNIX. Стоит напомнить еще раз, что от реализаций не требуется поддерживать какой-либо механизм соединения, кроме HTTP 1.1. Многие из них не хотят поддерживать соединения сокета.

Интерфейс StreamConnectionNotifier представляет известный сокет сервера. Интерфейс StreamConnection, который вы видели ранее, представляет сокет клиента.

Сокет — это сетевой механизм транспортного уровня, который обычно реализует пару протоколов TCP/IP в фиксированных межсетевых средах. Сокет сервера является программой, предоставляющей сетевую службу для соединений через сокеты.

Сокеты не требуют создания абсолютно никакой структуры полезной нагрузки, которую они транспортируют. Как и дейтаграммы, они просто транспортируют последовательность байтов. Служба определяет формат, синтаксис и семантику транспортируемых данных, составляющих сообщения. Клиенты должны соблюдать эти правила, для того чтобы использовать службу.

Поделиться:
Популярные книги

Возвращение

Штиль Жанна
4. Леди из будущего
Любовные романы:
любовно-фантастические романы
8.65
рейтинг книги
Возвращение

Начальник милиции. Книга 4

Дамиров Рафаэль
4. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 4

Пышка и Герцог

Ордина Ирина
Фантастика:
юмористическое фэнтези
историческое фэнтези
фэнтези
5.00
рейтинг книги
Пышка и Герцог

Ваше Сиятельство 8

Моури Эрли
8. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 8

Отверженный IX: Большой проигрыш

Опсокополос Алексис
9. Отверженный
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Отверженный IX: Большой проигрыш

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Мастер 8

Чащин Валерий
8. Мастер
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Мастер 8

Хозяйка старой пасеки

Шнейдер Наталья
Фантастика:
попаданцы
фэнтези
7.50
рейтинг книги
Хозяйка старой пасеки

Ваше Сиятельство 11

Моури Эрли
11. Ваше Сиятельство
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Ваше Сиятельство 11

Эволюционер из трущоб. Том 4

Панарин Антон
4. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 4

Измена. Верни мне мою жизнь

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верни мне мою жизнь

Газлайтер. Том 3

Володин Григорий
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 3

Боец с планеты Земля

Тимофеев Владимир
1. Потерявшийся
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Боец с планеты Земля

Магия чистых душ 3

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Магия чистых душ 3