переадресация портов в iPhone - PullRequest
0 голосов
/ 22 августа 2011

Мне нужно настроить маршрутизатор для пересылки данных, полученных с сервера (www.server.com:1112) через какой-либо порт xxxx, в мое приложение для iPhone.Понятия не имею.Мое приложение прослушивает порт, но в то время как сервер отправляет данные на порт xxxx, маршрутизатор отклоняет это.

Я выполнил ручную настройку на своем маршрутизаторе, и она работает нормально.Но я не могу ожидать, что все пользователи будут делать то же самое, а также я не могу заставить их делать такую ​​ручную настройку.Может кто-нибудь помочь мне, предоставив образец кода для iPhone.

Спасибо заранее.

1 Ответ

1 голос
/ 25 августа 2011

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

Я бы посоветовал вам лучше всего использовать uPNP и настроить совместимые маршрутизаторы для переадресации портов, аналогично BitTorrent. Мне повезло с фреймворком TCMPortMapper , и он используется в таких приложениях, как subethaedit . Чтобы бесстыдно вырвать из документации, открыть порт так же просто, как это:

TCMPortMapper *pm = [TCMPortMapper sharedInstance];
[pm addPortMapping:
[TCMPortMapping portMappingWithLocalPort:1337 # local port iPhone listens on 
                    desiredExternalPort:13337 # remote port you want router to listen on
                      transportProtocol:TCMPortMappingTransportProtocolTCP
                               userInfo:nil]];
[pm start];

Имейте в виду:

  1. Вышеуказанное должно работать непрерывно (что блокирует основной поток), чтобы порт оставался открытым. Вы хотите запустить его в фоновом режиме и зарегистрироваться для уведомлений. Прочитайте документацию для более подробных примеров.
  2. uPNP просто «запрашивает», чтобы маршрутизатор открыл данный порт. Он может отказаться, или он может не поддерживать его в первую очередь. Там нет никакого способа гарантировать, что это будет успешно, хотя вы можете уведомить пользователя, если это не так. Ваше приложение должно обслуживать это.
...