Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/27: Рейтинг темы: голосов - 27, средняя оценка - 5.00
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223

Сетевая игра

17.11.2011, 11:11. Показов 5691. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, Господа Программисты.
На моём счету 2 хорошие сетевые игры, но у обоих проблемы.
В первой только учился, реализовывал связь через NMUDP. То есть включил игру, выбрал кто-ты, сервер or клиент. Если сервер то к тебе мог подключится 1 клиент.
Во второй уже делал 2 приложения, сервер и клиент отдельно на основе idUDPServer and idUDPClient, к серверу могли подключится до скольки хош игроков.
В обоих такая проблема:
К серверу мог подключится только игрок у которого компьютер напрямую подключен к интернету. Во второй игре клиент был основан на idUDPServer и idUDPClient, сервер только на idUDPServer. (Клиентская часть: Так как у idUDPClient я не нашёл чего-то типо onRead, то юзал idUDPServer.)
На сколько я знаю сеть то сервер может быть только при прямом подключение к интернету, либо при проброске портов. Так вот, когда к серверу приходили пакеты он их считывал, парсил, и отправлял клиенту, конечно если клиент был на прямую подключен к интернету то до него пакеты доходили и всё было ок. Но как только клиень сидел из под роутера или wi-fi соединения, в общем без прямого подключения к нету то пакеты не доходили и на клиенте ничего не происходило.
Сейчас опять взялся за написание сетевой игры, но теперь хочется сделать по нормальному, чтобы как например в CS, CSS, Minecraft, в этих играх пакеты от сервера доходят даже если ты через 3 роутера сидишь Раз за разом перечитывая и переписывая исходники Minecraft'a дошёл до того что там вообще всё соединение реализовано стандартным WINAPI через socket, WSA_Startup, etc... (UDP)
Так вот как бы мне сделать такое в своей игре не прибегая к WINAPI напрямую, хочется через Indy.
Надеюсь и блогадорю вас за вашу помощь. Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.11.2011, 11:11
Ответы с готовыми решениями:

Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново?
Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново? unit1.cpp void __fastcall TForm1::N1Click(TObject...

Системная или сетевая ошибка
Здравствуйте! Приложение написано в C++Builder 6 в Windows XP. Запускаю приложение в Windows 7, вылетает ошибка с текстом "Системная...

Сетевая карточная игра "Дурак"
https://www.dropbox.com/home?preview=1igra_durak.rar

13
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
17.11.2011, 11:25
создайте условия, чтобы клиент мог подключиться к серверу,
попробуй пингом проверить
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
17.11.2011, 11:32  [ТС]
Используется только UDP, в UDP в принципе на сколько я знаю нет соединения, он может слать пакеты даже если сервер на конечной рабочей станции не запущен.
Как тогда быть?
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
17.11.2011, 11:34
пинг до сервера проходит?
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
17.11.2011, 11:38  [ТС]
из-под cmd да. Не доходят пакеты из моей игры. Так как пакеты напрямую отправляю на IP пользователя. А это же может быть и IP роутера. Как быть?
отправка:
C++
1
2
3
4
5
6
bool SendPacket(AnsiString IP, AnsiString Packet)
{
  try{frmMain->Server->Send(IP,(short)32146,Packet);}
  catch(...){return false;}
  return true;
} // В очень редких случаях возвращает false, сделал boolean так просто для само-контроля))
0
 Аватар для pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
17.11.2011, 11:48
подобная темя совсем недавно обсуждалась, пройдись по темам!
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
17.11.2011, 11:51  [ТС]
Я пересматриваю темы на этом форуме по 10 раз на дню...не замечал. Подкинул бы ссыль, был бы очень благодарен.)
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
17.11.2011, 12:05
Игра по сети через интернет (сокеты).
1
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
17.11.2011, 12:08  [ТС]
Уже читал. Смысла не уловил.
Тот кто держит сервер моей игры у него конечно-же статический IP, и нормальные клиенты к нему нормально цепляются.
А вот если клиент из под роутера, wi-fi'я уже обратно к клиенту пакеты не даходят.
Я прошу одного, объясните как сделано соединение клиент\сервер в том же Counter-Strike, CSS, Minecraft, War-craft, там без разницы под чем и где сидит клиент, главное чтобы у сервера был статический (выделенный) IP?
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
17.11.2011, 12:22
сначала нужно, чтобы клиент смог подключиться к серверу.
при удачном подключении сервер обрабатывает запрос и отправляет результат на тот ип:порт, с которого пришел запрос.
в твоей программе тебе уже известен сокет, связывающий сервер и клиент; он создаётся, когда клиент подключается к серверу. вот в этот сокет и нужно отправлять результат от сервера клиенту.
1
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
17.11.2011, 12:30  [ТС]
при удачном подключении сервер обрабатывает запрос и отправляет результат на тот ип:порт, с которого пришел запрос.
Я так и делаю.
в твоей программе тебе уже известен сокет, связывающий сервер и клиент; он создаётся, когда клиент подключается к серверу. вот в этот сокет и нужно отправлять результат от сервера клиенту.
А вот это точно...припоминается что-то такое...щас буду пробывать, спасибо тебе kzru_hunter, от души
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
17.11.2011, 12:40
Цитата Сообщение от kzru_hunter
при удачном подключении сервер обрабатывает запрос и отправляет результат на тот ип:порт, с которого пришел запрос.
Цитата Сообщение от Matrica Посмотреть сообщение
Я так и делаю.
если у в программной части клиента прописан статический порт и если клиент отправит запрос серверу, то когда запрос пройдет через роутер, то исходящий ип-адрес и порт пакета будут изменены роутером.
когда сервер получит такой пакет и после этого сервер попробует обратно напрямую клиенту что-то отправить на тот самый порт, который прописан в коде клиента, то ничего не выйдет.
пакет пришел от роутера, значит и ему нужно отправлять обратно через уже открытый сокет.
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
17.11.2011, 12:43  [ТС]
Ну в общем на сколько я понял нужно через сокет который при подключении создаётся отправлять, типо он содержит информация для роутера например, куда передать? Но на сколько я знаю UDP не создаёт подключений, значит сокетов тоже? Или я что-то не понимаю? Разъясните пожалуйста незнающему?))
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
17.11.2011, 13:16
UDP также использует сокеты. про UDP лучше почитать в инете, а то если я начну объяснять, то могу кое где неправильно сказать
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2011, 13:16
Помогаю со студенческими работами здесь

дисковая или сетевая ошибко
я читал вот эту тему...

сетевая БД с несколькими пользователями, есть взаимодействие с mysql сервером
Помогите, пожалуйста, определится с выбором: сетевая БД с несколькими пользователями, есть взаимодействие с mysql сервером. Какую...

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

Сетевая игра
Я пишу игру Монополия, пока делаю несетевую версию (т.е. люди должны быть за 1 компом), в планах конечно хочется сделать сетевую, но вот...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru