2009-10-21 3 views
1

Я сделал удаленный движок для игры, который должен быть способен работать в P2P.C#, сокет через маршрутизатор

Он прекрасно работает в локальной сети, но есть проблема, когда компьютеры стоят за маршрутизаторами и хотят общаться через Интернет.

Есть ли какое-либо решение для этого, которое не нуждается в управлении конфигурацией маршрутизатора? Потому что, поскольку большинство моих геймеров не могут быть очень признаны в информатике, я бы хотел как можно быстрее решить эту проблему без каких-либо вмешательств.

Thanks,

KiTe.

ответ

4

Вам необходимо, чтобы клиент за маршрутизатором инициировал соединение OUTGOING. Как только это будет установлено, вы можете иметь двухстороннюю связь. Вот почему в большинстве игр P2P есть своего рода сервер для настройки совпадений между клиентами. Каждый клиент может установить сокет на сервер, а затем подключить их друг к другу.

Некоторое время назад была альтернатива, называемая «дыра в отверстиях для NAT», но я не уверен, насколько она надежна.

Это то, что отделяет LogMeIn от VNC.

+0

hmm Если я сделаю один клиент подключиться к веб-сайту с помощью API-интерфейса php, получить его общедоступный IP-адрес и привязать к нему сокет, будет ли он работать? (предположим, что другой может также получить это, независимо от способа) – KiTe

+0

нет, к сожалению, общедоступный ip не достаточно. Как сказал remus, в настоящее время evryone имеет маршрутизатор с поддержкой NAT. Этот маршрутизатор назначит частный IP-адрес домашнему компьютеру, и каждый запрос, который покидает здание, получает запись в таблице NAT, которая связывает пару локальных IP-портов с общедоступной парой IP/Port. Это то, что настраивает маршрутизатор, он отображает любой входящий запрос на конкретном порту на конкретный компьютер в доме. Внешние компьютеры не могут знать ваш внутренний IP (что хорошо) – LoveMeSomeCode

1

В настоящее время почти все домашние пользователи находятся за формой NAT, что не позволяет на практике установить реальную одноранговую связь, поскольку порт прослушивания приложений недоступен из сети.

В теории существует UPnP, которая позволяет приложениям (работающие при повышенных привилегиях), чтобы включить порт переадресацию динамически на домашнем маршрутизаторе (через Internet Gateway Device Protocol), но на практике это настолько ненадежно, что я не видел какое-либо реальное использования его ,

Самое надежное решение - иметь центральный концентратор (ваш игровой сервер), который пересылает пакеты между клиентами, которые инициируют подключение из-за устройства NAT. Но для вас это является серьезной проблемой, так как вам нужно будет обналичить затраты на предоставление ресурсов и управлять этими центрами, что может быть серьезным делом, даже с динамическими решениями «точно в срок», такими как EC2.

Update

Может быть, вы можете использовать Codeplex UPnP NAT traveral project.