Работа с Сетью в Blitz3D: TCP - Blitz 3D - Игровые движки
Навигация по сайту
Сайт:

Дополнительно:

Файловый архив:

Каталог статей:

Форум:


Категории раздела
Blitz 3D [8]
Остальное [3]
Все остальное, что не попадает ни под одну категорию.

Мини-Опрос
Какова Ваша специальность?
Всего ответов: 1058

Партнеры сайта
....

 Главная » Статьи » Игровые движки » Blitz 3D » Работа с Сетью в Blitz3D: TCP

Работа с Сетью в Blitz3D: TCP

20:52
Итак, вы решили изучить основу многих протоколов высшего уровня, то бишь ТСР? Хорошо! Чем он хорош? Гарантией того, что сообщение придет в целости и сохранности. Однако, в результате этого мы теряем скорость. Целеобразно использовать ТСР там, где надежность важнее скорости. В ином случае - используйте UDP(я уже написал туториал по нему - почитайте).
Начнем, пожалуй, с пары нюансов. Во-первых, ТСР использует архитектуру "клиент-сервер", что облегчает нам жизнь, и на нужно знать IP-адресс только сервера. Всмысле, сначала. Во-вторых, тут насчет портов такой же принцип как и в UDP. Порты до 1024 являются системными и использовать их в сетевых играх не стоит. Также следует поберечься от портов с номерами от 1024 до 49151 - они зарезервированны. Рекомендуется использовать порты с номерами от 49152 до 65535 - они динамические. В отличие от UDP, в ТСР вам надо сразу определится с портом, ибо тут нет таких вольностей, как "обнаружение свободных портов".
Рассмотрев моменты, приступим к рассмотру команд. Итак, так как в ТСР архитектура "клиент-сервер", значит у нас имеется две команды инициализации сеанса: для сервера и для клиента. Для начала давайте разберемся с сервером.

поток_сервера=CreateTCPServer(порт)
Создает сервер потока ТСР на указанный порт и возвращает хэндл потока сервера. Возвращает 0, если неудачно, поток - если удачно. Про порты уже говорилось выше. Далее, для сервера, чтобы получать и писать сообщение, надо принимать входящий поток. Делается это коммандой AcceptTCPStream вот так: поток=AcceptTCPStream(поток_сервера)

Думаю, в примере это будет смотрется понятнее:

svr=CreateTCPServer(80)
While Not KeyHit(1)
pot=AcceptTCPStream(svr)
Wend

Таким образом, мы создали сервер на порте 80. К слову, если вы на блице пишете программу для работы с сетью (броузер, почтовый клиент и т.д.), то вы конечно же можете использовать системные порты - они для того и предназначены. Однако, если вы создаете игру - берите динамический и только. Вернемся к коду. Мы каждый цикл пытаемся принять входящий поток, чтобы в цикле можно было соответственно читать и посылать информацию. Чтобы получить IP-адресс пославшего, используем функцию TCPStreamIP. Синтаксис:

переменная=TCPStreamIP(поток)

Возвращает целочисленный IP в переменную. Если вам надо получить точечный IP - смотрите в справке DottedIP$()
Также можно получить порт машины клиента функцией TCPStreamPort:

переменная=TCPStreamPort(поток)

Обьяснять, думаю не надо?
Теперь о передаче информации. А как же эта информация собственно посылается и получается? Очень просто! Вы, я думаю, уже работали с файлами, не так ли? Так вот, представьте, что ТСР-поток - это ваш файл и просто используйте команды для чтения в или из потока. Правда, с чтением есть еще один нюанс - надо проверять, пришла ли какая-то информация. Это очень просто! AcceptTCPStream возвращает 0, если ничего не пришло и поток для того, кто послал сообщение, если оно, собсно, было посланно. И нужно учесть еще вот что - человек мог сделать запрос вот таким:

WriteLine pot,"1"
WriteLine pot,"2"
WriteLine pot,"3"

Как его считать? Опять таки, очень просто! С помощью, думаю, знакомой вам функции Eof:

Eof(поток)

Возвращает False если информация в потоке еще не закончилась и True, если вся уже пришла и считана. Вот как это:

svr=CreateTCPServer(50000)
While Not KeyHit(1)
pot=AcceptTCPStream(svr)
If pot Then
While Not Eof(pot)
Print Readline$(pot)
Wend
Endif
Wend

Чтобы написать игроку, нужно писать именно на уникальный поток. Сейчас я вам покажу, как собсно получить этот поток:

Type Player

Field stream
End Type

svr=CreateTCPServer(50000)
While Not Keyhit(1)
pot=AcceptTCPStream(svr)
If pot Then
p.Player=New Player
p\stream=pot
Endif
Wend

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

For p.Player=Each Player

If ReadAvail(p\stream) Then
...
Endif
Next

Думаю, все ясно как пень. Самая сложная часть позади. Теперь давайте о клиенте.
Подключается он командой OpenTCPStream. Синтаксис:

поток=OpenTCPStream(IP_сервера,порт)

Возвращает 0 если неуспешно, и поток - если успешно. Тут все проще, нежели у сервера. Просто посылаем информацию на этот же поток и все! Для наглядности пример:

pot=OpenTCPStream("prevedmedved.ru",80)
WriteLine pot,"PREVED!"

Вот и все! Что еще хотелось бы сказать, так это насчет посылания сообщения другим клиентам. Так вот. ВСЕ передается через сервер. Вот так вот. Если надо послать мэссагу кому-то одному - шлем запрос серверу. Хотим всем - шлем запрос к серверу. И сервер должен все эти запросы отрабатывать.
Вот и закончили мы долбить второй основной протокол, поддерживаемый блицем. А что это нам дает? Очень многое. Ведь нам открывается дорога к протоколам более высокого уровня. Но об этом в следующих статьях.


Категория: Blitz 3D | Просмотров: 4098 | Добавил: ДядяВолк (11.08.2010) | Рейтинг: 0.0/0
Источник: http://quadrathell.cn.ua/ |
HTML ссылка на материал:
BB ссылка на материал:
Похожие материалы :
Возможно вам будет интересно:
Пишем модуль для работы с системным таймером (0)
Пингуем (Ping) под Delphi (1)
Создание RTS игры (2)
Массивы (0)
Создаем танчики (Урок 2) (0)
Создаем анимацию игрока (0)
О игрострое, движках и людях (1)
Создание арканойда шаг за шагом в XNA Game Studio (0)
Начинаем изучать PHP (4)
Borland Assembler (BASM) уроки для начинающих (урок 7 часть 1) (0)
Создание многопользовательской(online) игры на Game Maker. (часть 1) (0)
PHP - Базовые понятия (0)
Уроки Scirra Construct (0)
Экономика в ммо (2)
3D Rad - небольшая статья. (2)
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Поиск по всему сайту:
Поиск по разделу:

Панель пользователя
Здравствуйте, Гость


Ник:
Пароль:
Запомнить :

Ваш IP: 52.15.241.87

Случайные конструкторы

Случайные движки

Случайные статьи

Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0

На сайте были:

При полном или частичном копировании материалов сайта ссылка на Make-Games.ru обязательна. Make-Games.ru © 2008 - 2024 Хостинг от uCoz
Топ Разработка игр