C #, сокет через роутер - PullRequest
       17

C #, сокет через роутер

1 голос
/ 21 октября 2009

Я сделал удаленный движок для игры, который должен работать в P2P.

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

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

Спасибо,

кайт.

Ответы [ 2 ]

4 голосов
/ 21 октября 2009

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

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

Это то, что отличает LogMeIn от VNC.

1 голос
/ 21 октября 2009

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

Теоретически существует UPnP , который позволяет приложениям (работающим с повышенными привилегиями) динамически разрешать переадресацию портов на домашнем маршрутизаторе (через Протокол шлюза интернет-шлюза ), но на практике это настолько ненадежен, что я не видел его реального использования.

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

Обновление

Возможно, вы можете использовать Codeplex UPnP NAT travelral project .

...