UDP Как два компьютера в разных сетях могут соединяться друг с другом? - PullRequest
2 голосов
/ 09 сентября 2010

Как два компьютера, которые находятся в разных сетях, могут соединяться друг с другом по протоколу UDP? Я знаю, что вы можете сделать это, настроив переадресацию портов, но такие службы, как Xbox Live, через это не работают. Как это возможно и есть ли способ получить адрес другого компьютера в отдельной сети?

EDIT

Хорошо, спасибо за помощь, я использую objc, поэтому я использовал asyncsocket и portmapper для настройки маршрутизатора.

http://code.google.com/p/cocoaasyncsocket/

http://www.codingmonkeys.de/portmap/

Ответы [ 2 ]

3 голосов
/ 09 сентября 2010

Во-первых, получение общедоступного IP-адреса удаленного компьютера:

  • Использовать динамические днс.
  • Создайте собственный протокол и запустите сервер, чтобы сохранить список пользователей и IP.

Обработка входящих пакетов UDP:

  • Использовать связь клиент / сервер вместо одноранговой.
  • Используйте протокол UPnP (я думаю, что xbox делает это), чтобы запросить у вашего маршрутизатора порт. Не все маршрутизаторы поддерживают или поддерживают UPnP.
  • Использовать протокол TURN / STUN. Этот протокол был разработан для обхода UDP nat. Для этого требуется внешний сервер, но доступны бесплатные серверы.

Я думаю, что есть библиотеки для UPnP и STUN, но я не могу вам точно сказать.

0 голосов
/ 20 сентября 2012

LatinSuD правы, STUN - хорошее решение - проверьте реализацию протокола STUN для iOS https://github.com/soulfly/STUN-iOS

...