IM-программы не требуют открытых портов, потому что они являются клиентскими программами. Как правило (следите за исходящими межсетевыми экранами), все порты открыты для исходящих соединений на клиенте. Чтобы на самом деле принимать соединения, порт должен разрешать входящий трафик. Например, большинство серверов могут принимать входящий трафик на все порты. Сетевые коммуникации и протоколы разработаны с учетом этого: клиент (ваш браузер) всегда инициирует подключение к серверу (веб-сайту), а не наоборот.
Что касается протокола, вы должны использовать либо TCP / IP, либо UDP, в зависимости от того, что вам нужно сделать. UDP отлично подходит, если вы планируете иметь своего клиента для игровой учетной записи для пропуска информации с использованием аппроксимации (большинство игр FPS делают это, а также почти любая игра, требующая очень быстрых рефлексов), где TCP / IP проще, значительно уменьшит ошибки при передаче и быть более склонными к отставанию. Основное различие между ними заключается в том, что UDP - это «запустить и забыть», то есть он не потрудится проверить, действительно ли сообщение прибыло в пункт назначения.
Что касается протокола, вы упомянули http и ftp. Я бы очень посоветовал не использовать ни того, ни другого. Когда вы используете прямую связь с сокетом через пользовательский порт, вы имеете полную свободу в создании собственного протокола для игры. Пока он выполняет свою работу, отправляя пакеты туда и обратно, все остальное в нем полностью зависит от вас, и должно быть. В конце концов, протокол игры должен быть быстрым , вы не хотите, чтобы весь этот дополнительный мусор заголовка из-за засорения http ваших сетевых передач, если вам это действительно не нужно.
Просто помните: для сетевых подключений требуются две части: клиент и сервер. Это означает, что у вас либо настроен центральный сервер для игры, либо у вас есть один игрок, «хозяин» игры (выступая в качестве сервера, ему понадобятся открытые порты). Другие игроки (все игроки в настройке центрального сервера) подключаются к центральному парню и передают через него связь. Это означает, что вашему игровому протоколу нужны две части: серверная и клиентская. Клиент в большинстве игр работает вслепую, поскольку он отсылает игроку информацию о пользователе, а затем полагается на обновления сервера, чтобы сообщить ему, где находится все остальное в игре. Сервер должен отвечать за сбор информации об игроках от всех клиентов, а затем распространять эту информацию среди всех остальных. Это может включать валидацию (большинство так и делают) для предотвращения «незаконных» событий в игре, но это зависит от вас.