Воскресенье, 17 Ноября 2024, 13:39

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [357]
Статьи об общих понятиях связанных с созданием игр.
Программирование [83]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [147]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [17]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [167]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [132]
Статьи, которые не вошли в определённые разделы.
Наш опрос
На какую платформу/систему создаёте игры?
Всего ответов: 10686
Главная » Статьи » Разное

Клиент-серверное приложение на Faucet Networking. ч.1

Faucet Networking - сетевое расширение, предназначенное для создания многопользовательских приложений.
Достоинства Faucetnet:


    *Fn предоставляет поддержку протоколов IPv4 и IPv6
    *Детальная документация всех функций
    *Работа в отдельном потоке
    *Отсутствие багов в сравнении с 39dll
    *Либеральная лицензия
    *Также есть версии для мобильных устройств
    *Поддержка прямого и обратного порядка байт
    *Простой в изучении и использовании
    *Также поддерживает udp
    *Работает в несколько раз быстрее 39dll

Недостатки:

    *Отсутствие русского сообщества
    *Не так известен как 39dll

От себя добавлю, что Faucetnet действительно прост. Например, первое впечатление я получил от работы функции проверки на подключенность клиента к серверу. И она действительно работает, в отличии от известного всем 39dll. Поэтому всем тем кто делает мультиплеерные игры это расширение стоит изучить

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

Алгоритм работы клиента:
1.Клиент подключается к серверу
2.Посылает сообщение в зависимости от его действий
3.Получает результат

Алгоритм работы сервера:
1.Сервер слушает порт на подключения
2.Если подключается новый клиент, то заносим его в лист или массив
3.Проверяем действия подключенного клиента
4.Отвечаем клиенту по его действию

И так, реализация по порядку описанному выше.
1.Создадим проект с названием ClientFaucetnet (или как хотите)
2.Добавляем расширение Faucet Networking в проект
3.Создаем объект control
4.Добавляем событии Create
5.Пишем код:
Код

port = 8888;
ip = "127.0.0.1";
server = tcp_connect(ip, port)

if (socket_has_error(server) )
{
  show_message("Error: "+string(socket_error(server)));
  exit;
}

6.Тут будем пилить регистрацию

Переходим к серверу.
1.Создадим проект Server
2.Также добавляем расширение
3.Создаем объект control
4.Как уже догадались в событии Create:
Код

port = 8888;
listen = tcp_listen(port);
if (socket_has_error(listen))
{
  show_message("Error: "+string(socket_error(server)));
  exit;
}

list_client = ds_list_create();

5. В Step'e:
Код

var new_client;
new_client = socket_accept(listen);
if (new_client)
{
  ds_list_add(list_client, new_client);
}

var c_client;
for(f = 0; f != ds_list_size(list_client); f += 1)
{
  c_client = ds_list_find_value(list_client, f)
  if (tcp_eof(c_client))
  {
  ds_list_delete(list_client, f);
  if (ds_list_empty(list_client))
  break;
  }
}

6. Теперь в Draw'e:
Код

draw_text(5,5,"clients: " + string(ds_list_size(list_client)));

Все можете скопировать, всавить и запсутить.
Все работает.
Теперь объясняю код:

В клиенте, в событии создания, мы использовали функцию tcp_connect чтобы подключиться к серверу, используя порт сервера и его айпи адрес. Если происходит какая то ошибка, мы ее выводим и выодим из скрипта, используя функции socket_has_error для проверки ошибка и socket_error для возврата текста ошибки. Заметим, что если произошла ошибка мы подключиться заново к серверу не можем т.к. мы вышли из скрипта создания. Функция tcp_connect возвращает индентификатор сокета к которому мы пытаемся подключиться. Его мы используем для принятия и отправки сообщений серверу.

В сервере, мы слушаем порт на проверку подключений функцией tcp_listen. Также если произошла ошибка мы ее показываем и выходим из скрипта. Чтобы заново попытаться прослушать порт придется перезапустить приложение.
И создаем структуру данных, в данном случае список, для хранения подключенных клиентов. Он нам пригодится. Я мог бы использовать и массивы, но списки будут удобнее и немножко быстрее. Step, как всем известно или я вам открою правду, обновляется со скоростью рума. В нем мы проверяем со скоростью рума на подключения клиентов.
Точнее скажу так: если клиент "стучится" к нам, то используя функцию socket_accept мы принимаем его и добавляем в список подключенных клиентов.
Здесь вы заметите разницу между socket_accept и tcp_listen. Вторая ичпользуется чисто для прослушки порта, если есть подключение она передает сообщение функции socket_accept что есть новое подключение. Итак, с этим мы разобрались.
В цикле, мы проходимся по всем пк(покдлюченным клиентам) и проверяем отключился ли текущий клиент. Если да, то удаляем его из списка. И конечно, проверяем если список пустой то выходим из цикла. Т.к. если вы не выйдете то программа может сильно зависнуть.
В событии рисования мы просто отрисовываем кол-во подключенных клиентов.
Все, ничего сложного здесь нет. Все очень легко и просто. Теперь вы знаете что то за зверь такой, этот Faucet Networking.
В следующей статье я напишу, как прикрутить сюда регистрацию клиента, а также
вход и перемещение игрока, а также отправку координат, ну и отображение ника во время игры другим игрокам smile

Ссылка на расширение, примеры, справку и перевод: Faucetnet
Оффициальный источник: YoYo
Категория: Разное | Добавил: krap (12 Ноября 2013)
Просмотров: 3848 | Комментарии: 1 | Рейтинг: 4.7/6 |
Теги: Сеть, Онлайн, для новичков, faucet networking, faucetnet, для интересующхся, многoпoльзoватeльcкий, программирование, game_maker, для незнающих
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Клиент-серверное приложение на Faucet Networking. ч.1», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 1
+0-
1 ykpon   (18 Июля 2014 16:22) [Материал]
Такой вопрос:
Почему при подключении к серверу через tcp_connect, он не выдает ошибки даже когда сервер отключен ?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • S2 Engine
  • Ignifuga
  • BlitzPlus
  • Fyrox
  • Mark IV Engine
  • 3D Adventure Studio
  • Blitz3D
  • WinPAW
  • BASIC8
  • DX Studio
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг