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

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

Жанры

Шрифт:

Запустите данный сервер. Этот метод должен бытьвызван явно после создания данного объекта. Он запускает прослушивание запросов клиентов на известном сокете.

Оператор вызова должен запустить это выполнение в отдельной нити.

*/

public void run

{

while (true)

{

try

{

// Откройте соединение известного сокета для данной

// «службы». wellKnownConn = (StreamConnectionNotifier)

Connector.open(uri);

//Прослушиваем запросы соединения. Данный вызов

// блокирует работу до тех пор, пока не будет получен

// запрос

на соединение.

clientConn = wellKnownConn.acceptAndOpen

// Создадим экземпляр агента» сервера, объект, который

// представляет службу для клиента. Каждый экземпляр

// взаимодействует с одним клиентом.

// Порождаем нить для взаимодействия с

// клиентом, создавшим запрос на соединение.

ServerAgent agent = new ServerAgent(clientConn);

Thread thread = new Thread (agent);

} catch (lOException ioe)

(System.out.printlnfioe.getMessage!));

ioe.printStackTrace; break;

)

}

}

}

Листинг 8.7. Агент сервера является объектом, который взаимодействует с клиентом независимо от демона сервера. Он запускает свою собственную нить, позволяя другим экземплярам одновременно взаимодействовать со своими клиентами

import javax.microedition. io._StreamConnectior.;

/**

Данный класс определяет компоненту, которую сервер создает для взаимодействия с клиентом.

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

Экземпляры данного класса являются частью сервера.

*/

public class ServerAgent implements Runnable

private StreamConnection conn;

/**

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

@param с Объект соединения, который представляет

соединение с клиентом. Класс ServerSocket создает и пересылает

его в данный конструктор.

*/

public ServerAgent(StreamConnection c)

super ; conn = с;

}

/**

Выполняется агент данного сервера. Начинается диалог с клиентом. Этот метод должен быть вызван явно после того, как создан данный объект.

public void run

}

// Взаимодействует с клиентом. Реализует поведение,

// которое определяет данную службу.

}

}

Листинг 8.8. Клиент имеет отдельно соединение с агентом сервера. Модель состояния взаимодействий, а также синтаксис и семантика взаимодействий определяются сервером, но клиенты должны им подчиняться

import javax.microedition.midlet.MI Diet;

import javax.microedition.io.StreamConnection;

import javax.microedition.io.Connector;

import Java.io.lOException;

/**

Данный класс реализует клиента, который соединяется с сервером.

Для создания экземпляра данного класса вы должны указать сервер (имя сервера DNS) и известный порт службы, с которой вы хотите установить соединение.

*/

public class ClientSocket implements Runnable

{

public static final String P.ROTOCOL =

«socket»;

// Порт известного сокета сервера, private String serverPort;

// Имя сервера, с которым соединяемся, private String serverHostName;

// URI известного серверного сокета. private String serverURI;

// Соединение с. сервером.

private StreamConnection streamConn;

protected ClientSocket

}

super;

}

/**

Открытый конструктор. Вы должны указать имя сервера DNS и номер порта службы. @param server — имя DNS машины, с которой вы хотите соединиться.

@param port — Номер порта сервера, с которым вы хотите соединиться.

*/

public ClientSocket(String server, String port)

throws TOException

(

this;serverHostName = server; serverPort = port;

serverURI = buildServerURI ; open ;

}

/**

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

@param uri — полностью сформированный URI службы, запрос на соединение с которой вы хотите создать.

@сбрасывает InvalidArgumentException при несформированном URI.

*/

public ClientSocket(String uri) throws lOException

{

this ; serverURI = uri;

}

Открывает соединение. После того как создан данный объект, соединение с сервером еще не открыто. Вы должны открыть его явно.

Это делает модель использования более гибкой для клиентов.

@ сбрасывает lOException, если соединение не может быть открыто по некоторым причинам.

*/

public void open throws lOException

streamConn = (StreamConnection) Connector.open(serverURI);

/**

Закрывает соединение с сервером.

*/

public void closed try streamConn. closed; }

catch (lOException ioe)

}

ioe.printStackTraced;

{

{

/**

Выполняет клиентское взаимодействие.

Запускает посылку клиентом запросов на сервер.

Этот метод должен быть вызван после того, как метод opend установит соединение.

*/

public void run

{

// Начинаем взаимодействие с сервером.

// Посылаем запросы, читаем ответы

….

private String buildServerURI

}

StringBuffex uri = new StringBuffer(PROTOCOL);

uri.append ("://"); uri.append(serverHostName);

uri.append(":"); uri.append(serverPort); return uri.toString ;

}

}

Использование соединений сокета в приложениях MIDP. Естественно, тот факт, что интерфейс StreamConnectionNotif ier определен как часть пакета IOMIDP, предполагает, что он должен использоваться приложениями, запускаемыми на устройствах MIDP. Это означает, что MID-лет может поддерживать открытое соединение с известным соке-том для использования клиентами. Клиенты, однако, могут находиться в другом месте.

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

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

Вернуть невесту. Ловушка для попаданки 2

Ардова Алиса
2. Вернуть невесту
Любовные романы:
любовно-фантастические романы
7.88
рейтинг книги
Вернуть невесту. Ловушка для попаданки 2

Поющие в терновнике

Маккалоу Колин
Любовные романы:
современные любовные романы
9.56
рейтинг книги
Поющие в терновнике

В комплекте - двое. Дилогия

Долгова Галина
В комплекте - двое
Фантастика:
фэнтези
юмористическая фантастика
попаданцы
8.92
рейтинг книги
В комплекте - двое. Дилогия

Господин следователь. Книга пятая

Шалашов Евгений Васильевич
5. Господин следователь
Детективы:
исторические детективы
5.00
рейтинг книги
Господин следователь. Книга пятая

Новый Рал 7

Северный Лис
7. Рал!
Фантастика:
попаданцы
5.00
рейтинг книги
Новый Рал 7

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

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

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

Тайны затерянных звезд. Том 2

Лекс Эл
2. Тайны затерянных звезд
Фантастика:
боевая фантастика
космическая фантастика
космоопера
фэнтези
5.00
рейтинг книги
Тайны затерянных звезд. Том 2

Командир штрафбата

Корчевский Юрий Григорьевич
3. Я из СМЕРШа
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.06
рейтинг книги
Командир штрафбата

Темный Лекарь 7

Токсик Саша
7. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.75
рейтинг книги
Темный Лекарь 7

Как я строил магическую империю 7

Зубов Константин
7. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фантастика: прочее
5.00
рейтинг книги
Как я строил магическую империю 7

Мастер 9

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

Лэрн. На улицах

Кронос Александр
1. Лэрн
Фантастика:
фэнтези
5.40
рейтинг книги
Лэрн. На улицах

Демон

Парсиев Дмитрий
2. История одного эволюционера
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Демон