Игровой протокол - PullRequest
       25

Игровой протокол

1 голос
/ 11 июня 2009

Существуют ли какие-либо стандартные протоколы, с которыми вы могли бы создавать игры (например, http, ftp), так как у меня были проблемы, когда я проверял соединение на случайном порте (1024-65300) (мне пришлось перенаправлять порты на моем маршрутизаторе и он работает только с одним компьютером одновременно).

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

Ты хоть представляешь, что я мог бы использовать? я использую с ++

p.s. Мне было бы интересно что-то похожее на http, кто-то отправляет запрос, а другой отправляет ответ. Я видел в HTML, вы должны отправить в ip / index.html или что-то подобное, что я не очень понимаю, как использовать ...

Ответы [ 5 ]

7 голосов
/ 11 июня 2009

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

Что касается протокола, вы должны использовать либо TCP / IP, либо UDP, в зависимости от того, что вам нужно сделать. UDP отлично подходит, если вы планируете иметь своего клиента для игровой учетной записи для пропуска информации с использованием аппроксимации (большинство игр FPS делают это, а также почти любая игра, требующая очень быстрых рефлексов), где TCP / IP проще, значительно уменьшит ошибки при передаче и быть более склонными к отставанию. Основное различие между ними заключается в том, что UDP - это «запустить и забыть», то есть он не потрудится проверить, действительно ли сообщение прибыло в пункт назначения.

Что касается протокола, вы упомянули http и ftp. Я бы очень посоветовал не использовать ни того, ни другого. Когда вы используете прямую связь с сокетом через пользовательский порт, вы имеете полную свободу в создании собственного протокола для игры. Пока он выполняет свою работу, отправляя пакеты туда и обратно, все остальное в нем полностью зависит от вас, и должно быть. В конце концов, протокол игры должен быть быстрым , вы не хотите, чтобы весь этот дополнительный мусор заголовка из-за засорения http ваших сетевых передач, если вам это действительно не нужно.

Просто помните: для сетевых подключений требуются две части: клиент и сервер. Это означает, что у вас либо настроен центральный сервер для игры, либо у вас есть один игрок, «хозяин» игры (выступая в качестве сервера, ему понадобятся открытые порты). Другие игроки (все игроки в настройке центрального сервера) подключаются к центральному парню и передают через него связь. Это означает, что вашему игровому протоколу нужны две части: серверная и клиентская. Клиент в большинстве игр работает вслепую, поскольку он отсылает игроку информацию о пользователе, а затем полагается на обновления сервера, чтобы сообщить ему, где находится все остальное в игре. Сервер должен отвечать за сбор информации об игроках от всех клиентов, а затем распространять эту информацию среди всех остальных. Это может включать валидацию (большинство так и делают) для предотвращения «незаконных» событий в игре, но это зависит от вас.

1 голос
/ 11 июня 2009

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

0 голосов
/ 15 июня 2009

Другое преимущество UDP и хитрость брандмауэра в том, что для большинства брандмауэров, если внутренний клиент отправляет пакет UDP, брандмауэр открывает порт UDP снаружи, который может принимать и пересылать внешние пакеты обратно источнику.

Таким образом, если все ваши клиенты отправляют UDP на центральный сервер, этот сервер может собрать всю информацию о порте UDP и отправить ее обратно каждому клиенту (снова через UDP). Затем каждый клиент отправляет пакет UDP каждому клиенту, чтобы открыть порты брандмауэра. Это позволяет каждому клиенту общаться друг с другом напрямую, а не через сервер. Ему все еще нужен сервер, который каждый клиент может использовать в качестве места встречи.

Этот прием используется Skype и другими протоколами обмена мгновенными сообщениями, а также некоторыми клиентами BitTorrent, для работы которых требуется доступ по протоколу P2P.

Одна из проблем заключается в том, что весь трафик является UDP, что делает соединения ненадежными, поэтому вам нужно реализовать свою собственную версию TCP поверх нее, если вам нужна надежность. Я считаю, что для этого есть несколько библиотек. Или вы можете запустить что-то вроде OpenVPN, хотя это кажется излишним для игры.

0 голосов
/ 11 июня 2009

Большинство многопользовательских игр используют UDP, и порты различаются, некоторым нужно больше, чем другим. На стороне сервера обычно требуется переадресация открытых портов.

Очевидно, что вы будете глубоко вникать в программирование сокетов, чтобы сделать это. Веселитесь:)

0 голосов
/ 11 июня 2009

Некоторые маршрутизаторы могут обрабатывать запросы UPnP для открытия портов.

...