2013-05-07 2 views
0

Эй, я просто начинающий в сети.Прямая сеть TCP/IP между двумя устройствами Android через Интернет

Можно ли подключить два устройства Android друг к другу с использованием сокетов через Интернет без использования промежуточного выделенного сервера, учитывая, что в соединениях Wi-Fi и GPRS/3G есть маршрутизаторы Nat.

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

EDIT: Observation-> Когда я запрашиваю местонахождение своего публичного IP-адреса, я получаю случайные места , как и в других городах, а иногда и в других штатах !!! Что случилось? может кто-нибудь объяснить?

ответ

1

Общая конструкция такого решения подразумевает использование стороннего сервера. Для того, чтобы клиенты могли подключаться друг к другу, их публичный IP (то есть IP-адреса NAT) должен быть известен другой стороне. Когда мне приходилось что-то подобное, я применил STUN, который является частью метода ICE для установления одноранговых соединений. STUN поддерживает как TCP, так и UDP-трафик. Если вы хотите понять STUN, вы также должны прочитать о TURN.

Несмотря на то, что STUN требует, чтобы пользователь стороннего поставщика имел возможность напрямую подключаться, существует множество открытых STUN-серверов. Вот one of the lists появился быстрый поиск Google.

+0

Таким образом, вы можете связаться с сервером, который предоставит вам общедоступный IP-адрес и порт, которые может использовать другое устройство для вас! не так ли? но когда оба устройства отстают от упомянутого ограниченного конуса (ip или порт) NAT, как устройство может связаться с другим даже после его ip и порта – Allahjane

+0

Да, это более или менее корректно. В разделе «Алгоритм» статьи Википедии о пробивании отверстий TCP приведены некоторые примеры методов: http://en.wikipedia.org/wiki/TCP_hole_punching –

Смежные вопросы