Как запустить игру в качестве сервера с несколькими клиентами? - PullRequest
0 голосов
/ 15 марта 2012

Я написал приключенческую игру на c, и теперь я хочу запустить ее как сервер (telnet) с несколькими клиентами. Я хочу, чтобы у каждого игрока была отдельная копия игры.действительно знаком с программированием сокетов и не знаю, как я могу это сделать или как начать, и я прочитал некоторый учебник, но это не помогло.любая помощь ?обратите внимание, что я сделал все это программирование в * Ubuntu *.

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

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

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

Вы можете написать демона: когда каждый игрок подключается к нему, он запускает новый процесс, затем исполняет вашу игру - клиент просто вводит команды и т. д., и единственные изменения вваша игра должна использовать сокеты, а не консольный ввод-вывод.Но в этом нет никакой реальной выгоды по сравнению с несколькими людьми, использующими разные копии вашей игры.

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

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

0 голосов
/ 15 марта 2012

Сокеты в C - действительно интересная вещь для работы.

Сначала вам нужно придумать подходящий протокол , и вы должны внедрить его в менеджере клиентов.

Чтобы иметь несколько клиентов, необходимо иметь несколько сокетов, по одному для каждого клиента и один "основной" сокет для listen для соединений.

Основной сокет создается черезиспользование socket(), а затем вы должны использовать accept() для прослушивания соединений.При подключении клиента к вашему сокету accept() вернет новый сокет, зарезервированный для связи с этим клиентом.

Сокеты действуют как файлы, поэтому элементы сокетов используются как дескрипторы файлов.Чтобы убедиться, что у вас есть хорошая петля, вы должны использовать select(), предоставляя ей все свои сокеты, чтобы знать, когда:

  • У вас есть новое соединение, ожидающее вашего основного сокета,
  • Выможете написать клиенту,
  • У вас есть что почитать у клиента.

От того, как реализовать вашу игру с этим, зависит, в чем ваша игра и как онаplay.

Я предлагаю вам реализовать очередь действий, буферизируемых, когда клиент что-то делает, и разрешать их как можно скорее.Используйте тайм-аут select(), чтобы помочь вам в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...