Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
|
|
1 | |
Сетевая игра17.11.2011, 11:11. Показов 5305. Ответов 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
|
17.11.2011, 11:11 | |
Ответы с готовыми решениями:
13
Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново? Системная или сетевая ошибка Сетевая карточная игра "Дурак" дисковая или сетевая ошибко |
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
|
|
17.11.2011, 11:32 [ТС] | 3 |
Используется только UDP, в UDP в принципе на сколько я знаю нет соединения, он может слать пакеты даже если сервер на конечной рабочей станции не запущен.
Как тогда быть?
0
|
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
|
||||||
17.11.2011, 11:38 [ТС] | 5 | |||||
из-под cmd да. Не доходят пакеты из моей игры. Так как пакеты напрямую отправляю на IP пользователя. А это же может быть и IP роутера. Как быть?
отправка:
0
|
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
|
|
17.11.2011, 11:51 [ТС] | 7 |
Я пересматриваю темы на этом форуме по 10 раз на дню...не замечал. Подкинул бы ссыль, был бы очень благодарен.)
0
|
17.11.2011, 12:05 | 8 |
1
|
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
|
|
17.11.2011, 12:08 [ТС] | 9 |
Уже читал. Смысла не уловил.
Тот кто держит сервер моей игры у него конечно-же статический IP, и нормальные клиенты к нему нормально цепляются. А вот если клиент из под роутера, wi-fi'я уже обратно к клиенту пакеты не даходят. Я прошу одного, объясните как сделано соединение клиент\сервер в том же Counter-Strike, CSS, Minecraft, War-craft, там без разницы под чем и где сидит клиент, главное чтобы у сервера был статический (выделенный) IP?
0
|
17.11.2011, 12:22 | 10 |
сначала нужно, чтобы клиент смог подключиться к серверу.
при удачном подключении сервер обрабатывает запрос и отправляет результат на тот ип:порт, с которого пришел запрос. в твоей программе тебе уже известен сокет, связывающий сервер и клиент; он создаётся, когда клиент подключается к серверу. вот в этот сокет и нужно отправлять результат от сервера клиенту.
1
|
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
|
|
17.11.2011, 12:30 [ТС] | 11 |
0
|
17.11.2011, 12:40 | 12 |
Сообщение от kzru_hunter
когда сервер получит такой пакет и после этого сервер попробует обратно напрямую клиенту что-то отправить на тот самый порт, который прописан в коде клиента, то ничего не выйдет. пакет пришел от роутера, значит и ему нужно отправлять обратно через уже открытый сокет.
0
|
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
|
|
17.11.2011, 12:43 [ТС] | 13 |
Ну в общем на сколько я понял нужно через сокет который при подключении создаётся отправлять, типо он содержит информация для роутера например, куда передать? Но на сколько я знаю UDP не создаёт подключений, значит сокетов тоже? Или я что-то не понимаю? Разъясните пожалуйста незнающему?))
0
|
17.11.2011, 13:16 | 14 |
UDP также использует сокеты. про UDP лучше почитать в инете, а то если я начну объяснять, то могу кое где неправильно сказать
1
|
17.11.2011, 13:16 | |
17.11.2011, 13:16 | |
Помогаю со студенческими работами здесь
14
сетевая БД с несколькими пользователями, есть взаимодействие с mysql сервером Сетевая игра Сетевая игра Сетевая игра Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |