Вопрос о сокете программирования WiFi - PullRequest
0 голосов
/ 05 марта 2012

Я внедряю мобильное приложение для чата, я использую сокет-соединение для реализации p2p-соединения. Мой чат работает нормально с устройствами Android. Моя проблема в том, что я могу подключить устройство в сети 3G или в той же сети Wi-Fi, но соединение не работает, когда устройство из вне WiFi пытается подключить устройство в сети WiFi. Я знаю, что это из-за локального IP-адреса устройства, назначенного WiFi. Как получить рут и подключить устройство по WiFi?

Ответы [ 2 ]

0 голосов
/ 11 марта 2012

Саджан, ваша проблема связана не только с сопоставлением IP-адресов, но и с проблемой обхода NAT.Не всегда возможно пробить дыры в NAT.И когда это так, это должно быть сделано с помощью некоторых сложных методов, включая супер-одноранговый узел, расположенный за пределами вашего Wi-Fi / LAN, который будет читать переведенный адрес из вашего внутреннего однорангового узла.

Если вы не используете UDP и NAT не являетсядружественный, невозможно отправить TCP-соединение напрямую на внутренний узел.В большинстве случаев вам придется проверить, что возможно с NAT, и, если есть что-то возможное, вам нужно будет выполнить прогнозирование сопоставления и указать обоим равноправным абонентам попытаться соединиться с предсказанными IP-адресами.

Это действительно, если вы не хотите, чтобы пользователи настраивали свои NAT.И даже в этом случае такой конфигурации не всегда будет достаточно (если есть каскады NAT или, например, прокси).

0 голосов
/ 05 марта 2012

Звучит скорее как проблема с настройками маршрутизатора, чем как проблема приложения (это означает, что пользователи вашего приложения должны будут делать это и для своих сетей).

Ваш маршрутизатор Wi-Fi должен знать, как переадресовать связь на ваше устройство. Итак, допустим, что ваше приложение подключается к порту 1234, и вам нужно указать маршрутизатору переадресовывать связь извне через порт 1234 на внутренний IP-адрес вашего телефона в сети Wi-Fi.

Телефон, находящийся за пределами сети, должен использовать внешний IP-адрес вашей сети и порт 1234.

...