Можно ли подключить сокет между двумя мобильными устройствами (iPhones) через интернет?

можно ли подключить сокет между двумя мобильными устройствами (iPhones) через интернет?

Я пытаюсь обнаружить IP каждого устройства и подключиться напрямую. Я знаю, что это можно сделать с Bonjour, но это работает только в локальных сетях. Мне нужно высокоскоростное соединение между двумя устройствами через интернет.

спасибо.

7 ответов


Если у вас были оба IP, и они оба были маршрутизируемыми, это должно быть возможно. Я не уверен, хотя, если IP-адрес, выданный сетью 3G, маршрутизируется. Если вы используете WIFI, IP, который вы получаете, почти наверняка не маршрутизируется. Предполагая, что у вас есть маршрутизируемый IP-адрес, это должно быть возможно.

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

Это может быть немного сложно управлять "unregistering" IPs, когда приложение закрыто или когда IP меняется, но это должно быть выполнимо.

ЕТА:

Если у вас есть сервер, к которому они оба могут подключиться, вы должны иметь возможность реализовать решение с помощью этого сервера (т. е. без телефонов, фактически напрямую подключающихся друг к другу). Это позволило бы избежать проблемы наличия маршрутизируемых IPs для телефоны.

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

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


только предложение, но если вы можете заставить каждого из них подключиться к третьему сайту, вы будете знать адрес каждого. Отправьте адрес телефона A на телефон B (и/или телефон B на телефон A), а затем подключите их по своему усмотрению.


вы просмотрели все функции 3.0? В частности, одноранговые сети (существование которых является общедоступным).


маршрутизаторы WiFi часто имеют функцию, называемую "запуск Порта", которая позволяет внутренним хостам (в данном случае iPhone) сообщать маршрутизатору, что они хотели бы иметь соединения на определенном порту, перенаправленном им. Я понятия не имею, поддерживает ли iPhone этот протокол.

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


Это старая нить, но я только что наткнулся на нее. Вы можете использовать STUN-сервер (или NAT-PMP), чтобы получить общедоступный IP-адрес/порт, а затем отправить его на другой телефон. Пока вы открываете порт прослушивания на первом устройстве, ваше второе устройство может просто подключиться напрямую, используя IP-адрес publi / порт, который вы отправили ему в SMS (sms push registry может автоматически разбудить ваше приложение на втором устройстве для этого)


Я столкнулся с этой проблемой с приложением, которое я разрабатывал. Я пытался подключиться к сотовой карте ПК с iPhone. Проблема в том, что AT&T не позволяет мобильному завершению для iPhones, поэтому физически невозможно для двух телефонов в сети AT&T подключиться друг к другу. Это прямо от инженера антенны AT&T.

Я смог заставить это работать, имея iPhone VPN на сервере, а затем подключиться к сотовой карте ПК, но кроме этого, он не будет работа.


У меня очень сильное чувство (но нет доказательств), что адрес iPhone будет не маршрутизируемым. Конечно, это на самом деле зависит от оператора, но AT&T выдает 10.х.х.х адресов.

Яблоко пример (рабочий стол) код который использует Bonjour для реализации portmapping на маршрутизаторе WiFi, который поддерживает UnPnP.