Вход/Регистрация
Создание игр для мобильных телефонов
вернуться

Моррисон Майкл

Шрифт:

Датаграммные сокеты

Другой тип сокетов, поддерживаемый Java, – это датаграммные сокеты. В отличие от потоковых сокетов, в которых соединение больше похоже на постоянное сетевое подключение, датаграммные сокеты больше похожи на коммутированное подключение, при котором соединение активно не всегда. Датаграммный сокет – это сокет, через который данные разделяются на пакеты и отправляются, при этом «активное» подключение к другому устройству не обязательно.

Вследствие различий средств соединения датаграммные сокеты не гарантируют отправление информации в определенный момент и даже в определенном порядке. Причина, по которой этот тип сокетов работает именно так, заключается в том, что им не требуется непосредственное соединение с другим компьютером – адрес устройства связывается с передаваемой информацией. Такой пакет передается в сеть, оставляя отправителю надежду, что он когда-либо дойдет до получателя. Получатель может принять отправленные данные в любой момент времени и в любом порядке. Поэтому датаграммы также содержат число, определяющее, в каком порядке должны быть расположены данные, чтобы их можно было собрать воедино. Принимающее устройство ожидает прихода всей последовательности, а затем объединяет принятые пакеты.

Вы можете подумать, что датаграммные сокеты – не идеальное средство для программирования сетевых игр, и в некоторых случаях это так. Однако не всем играм требуется «активное» соединение, обеспечиваемое потоковыми сокетами. В случае специфических мобильных игр чаще всего целесообразно использовать именно датаграммные сокеты в виду ограниченности пропускной способности сети.

...

В копилку Игрока

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

Сетевое программирование и J2ME

Сетевое программирование в мидлетах выполняется с помощью MIDP API, которое носит название Generic Connection Framework или GCF. Цель GCF – обеспечить необходимый уровень абстракции для сетевых сервисов, которые помогают различным устройствам поддерживать специальные протоколы.

Хотя GCF структурирован иначе, он является подмножеством J2SE API. GCF описывает один фундаментальный класс, который называется Connector. Он используется для установления всех сетевых соединений мидлетом. Особые типы соединений моделируются интерфейсами, доступ к которым можно получить через класс Connector. Класс Connector и интерфейсы соединений находятся в пакете javax.microedition.io. Ниже приведено описание некоторых их интерфейсов:

► ContentConnection – потоковое соединение, которое обеспечивает доступ к данным из Web;

► DatagramConnetction – датаграммное соединение, используемое для реализации пакетно ориентированных соединений;

► StreamConnection – двунаправленное соединение с другими устройствами.

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

static Connection open(String name) throws IOException

Параметр, передаваемый в этот метод, – это строка соединения, которая определяет тип создаваемого подключения. Строка соединения описывается так:

Схема:Цель[;Параметры]

Параметр «Схема» – это название сетевого протокола, например, http или datagram. Параметр «Цель» – обычно адрес в сети, но может изменяться в соответствии с особыми типами протоколов. Последний параметр – это список параметров подключения. Ниже приведены строки соединений для различных типов подключений:

► HTTP – "http://www.stalefishlabs.com/"

► Socket – «socket://www.stalefishlabs:1800»

► Datagram – «datagram://:9000»

► File – «file:/stats.txt»

Помните, несмотря на то что приведенные примеры – это возможные строки соединения, только одна из них поддерживается реализацией MIDP – первая строка. Согласно спецификации MIDP поддерживается лишь HTTP-соединение. Если вы уверены, что другая реализация MIDP поддерживает какое-либо еще соединение, то вы можете использовать его. В противном случае вы должны создавать только HTTP-соединения, что, надо сказать, не очень хорошо для создания мобильных сетевых игр.

Метод open возвращает объект типа Connection, который является базовым интерфейсом для всех интерфейсов соединений. Чтобы использовать определенный тип интерфейса соединения, необходимо преобразовать тип Connection к нужному. Следующий код иллюстрирует использование интерфейса DatagramConnection для создания датаграммного соединения:

DatagramConnection dc = (DatagramConnection)Connector.open(«datagram://:5555»);

...

Совет Разработчику

Число 5555 в примере, – это сетевой порт, используемый датаграммным подключением. Номер порта может быть любым, но больше 1024. Очень важно, чтобы клиент и сервер мидлета соединялись через один и тот же порт.

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

Создание пакетов датаграммы

Чтобы использовать датаграммы для коммуникации через телефонную сеть, необходимо разделить данные на отдельные части – пакеты. Когда мобильные игры передают информацию через датаграммное соединение, они на самом деле отправляют и принимают пакеты. Датаграммные пакеты разработаны так, что они хранят массив байтов, поэтому любые данные в вашем пакете должны быть преобразованы в массив байтов. Когда вы создаете объект типа Datagram, необходимо определить число байтов, помещаемых в пакет. Ниже приведен пример создания объекта Datagram, способного хранить 64 байта информации:

Datagram dg = dc.newDatagram(64);

В этом коде объект Datagram создается вызовом метода newDatagram объекта соединения. Параметр метода newDatagram – это размер датаграммы в байтах. Такой метод хорошо подходит для приема информации в играх. Другой подход к созданию датаграммы – это создать и заполнить датаграмму в одной строке. Этот метод хорошо подходит для отправления информации, когда у вас есть данные для отправки. Многие игры для коммуникации используют сообщения, при этом каждая строка должна быть преобразована в байтовый массив перед тем, как будет сохранена в датаграмме:

  • Читать дальше
  • 1
  • ...
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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