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

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

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

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

Форум:


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

Мини-Опрос
Сколько Вам лет?
Всего ответов: 1490

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

 Главная » Статьи » Игровые движки » 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 | Просмотров: 2071 | Добавил: ДядяВолк (11.08.2010) | Рейтинг: 0.0/0
Источник: http://quadrathell.cn.ua/ |
HTML ссылка на материал:
BB ссылка на материал:
Похожие материалы :
Возможно вам будет интересно:
24 совета по программированию в Delphi (Дельфи) часть 2 (0)
Серия уроков по 3d Rad (0)
Урок для начинающих по Game Maker v8 (платформенная игра) (1)
Золотые Правила Игродела (0)
Создание 3D игр на Game Maker (3)
Создание арканойда шаг за шагом в XNA Game Studio (0)
Как рисовать спрайты в DXDraw DelphiX (0)
3d Rad - Как добавить свою модель (6)
Экономика в ммо (2)
Статья к теме "Психоделика" (9)
Создаем анимацию игрока (0)
3D Rad - небольшая статья. (2)
Создание текстовой игры (0)
Поиск файлов на винчестере в Delphi (0)
Уроки по C/C++ (Части с 21 по 40) (0)
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Мы в социальных сетях

Поиск
Поиск по всему сайту:
Поиск по разделу:

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


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

Ваш IP: 23.20.132.227

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

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

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

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

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

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