Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.227.194] |
|
Сообщ.
#1
,
|
|
|
Привет всем.
Я хочу реализовать upd сервер для игры. Сервер имеет белый ip и в некий порт, можно поставить какой захоыется. Нагуглил примеры, и все они отлично работают в локальной сети. А когда сервер находится где то на "другой стороне в интернете" то послать обратно пакет от сервера не получается, потому что в на сервере в принятом пакете endpoint выглядит как некий ip и некий произвольный порт, открыв которые и отправляя ответ он никуда не уходит. И вообще не понятно каким образом сервер сможет "отгадать" куда отсылать пакет, когда клиент находится за N кол-вом маршрутизаторов и т.п. Я в этом не специалист, поэтому прошу помощи подсказать, как реализуется данная задача? Добавлено ... и что (ip, порт) собственно, должен слушать клиент, ожидая ответа от сервера? |
Сообщ.
#2
,
|
|
|
Обратно ничего и не надо слать, когда акцептишь входящее соединение на сервере, создаётся сокет соединения с клиентом, вот туда и надо срать.
Добавлено Цитата Юра Железобетон @ ... и что (ip, порт) собственно, должен слушать клиент, ожидая ответа от сервера? Не должен, ибо слушать это есть бинд и листен, то бишь сервер, ты хочешь создать сервер на клиенте? |
Сообщ.
#3
,
|
|
|
Цитата Юра Железобетон @ Привет всем. Я хочу реализовать upd сервер для игры. Сервер имеет белый ip и в некий порт, можно поставить какой захоыется. Нагуглил примеры, и все они отлично работают в локальной сети. А когда сервер находится где то на "другой стороне в интернете" то послать обратно пакет от сервера не получается, .... Добавлено ... и что (ip, порт) собственно, должен слушать клиент, ожидая ответа от сервера? Всё получится, и я такое делал. --- Когда UDP-сервер получит пакет от клиента посредством "recvfrom", то может быть получена структура "sockaddr_in". В полях этой структуры имеются IP и порт отправителя. Туда можно отправить ответный пакет. --- Клиент, который желает получить ответ после посылки, должен читать статус сокета select-ом (с тайм-аутом, очевидно). И когда статус на чтение скажет "готово" - читать данные посредством "recvfrom". Как-то так, может что и упустил, давно делал. --- Только что попробовал удалённй комп у себя на работе - отвечает, ничего не поломалось. |