На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> UDP server , не в локальной сети
    Привет всем.
    Я хочу реализовать upd сервер для игры. Сервер имеет белый ip и в некий порт, можно поставить какой захоыется. Нагуглил примеры, и все они отлично работают в локальной сети. А когда сервер находится где то на "другой стороне в интернете" :) то послать обратно пакет от сервера не получается, потому что в на сервере в принятом пакете endpoint выглядит как некий ip и некий произвольный порт, открыв которые и отправляя ответ он никуда не уходит. И вообще не понятно каким образом сервер сможет "отгадать" куда отсылать пакет, когда клиент находится за N кол-вом маршрутизаторов и т.п. Я в этом не специалист, поэтому прошу помощи подсказать, как реализуется данная задача?

    Добавлено
    ... и что (ip, порт) собственно, должен слушать клиент, ожидая ответа от сервера?
      Обратно ничего и не надо слать, когда акцептишь входящее соединение на сервере, создаётся сокет соединения с клиентом, вот туда и надо срать.

      Добавлено
      Цитата Юра Железобетон @
      ... и что (ip, порт) собственно, должен слушать клиент, ожидая ответа от сервера?

      Не должен, ибо слушать это есть бинд и листен, то бишь сервер, ты хочешь создать сервер на клиенте?
        Цитата Юра Железобетон @
        Привет всем.
        Я хочу реализовать upd сервер для игры. Сервер имеет белый ip и в некий порт, можно поставить какой захоыется. Нагуглил примеры, и все они отлично работают в локальной сети. А когда сервер находится где то на "другой стороне в интернете" :) то послать обратно пакет от сервера не получается,
        ....
        Добавлено
        ... и что (ip, порт) собственно, должен слушать клиент, ожидая ответа от сервера?

        Всё получится, и я такое делал.
        ---
        Когда UDP-сервер получит пакет от клиента посредством
        "recvfrom", то может быть получена структура "sockaddr_in".
        В полях этой структуры имеются IP и порт отправителя.
        Туда можно отправить ответный пакет.
        ---
        Клиент, который желает получить ответ после посылки,
        должен читать статус сокета select-ом (с тайм-аутом, очевидно).
        И когда статус на чтение скажет "готово" - читать
        данные посредством "recvfrom".

        Как-то так, может что и упустил, давно делал.
        ---
        Только что попробовал удалённй комп у себя на работе - отвечает,
        ничего не поломалось.
        Сообщение отредактировано: ЫукпШ -
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0184 ]   [ 16 queries used ]   [ Generated: 28.03.24, 18:20 GMT ]