2013-06-27 6 views
1

За последние две недели я безуспешно пытался внедрить перфорирование отверстий udp, но я не уверен, почему. Я понимаю, что алгоритм для перфорации отверстий не гарантированно работает, но я считаю, что он должен работать в моем тестовом примере, потому что я заметил, что как только я привяжу свой сокет к своей домашней сети, порт будет таким же во внешнем мире, как и он локально и остается таким образом для всех соединений, сделанных из этого сокета. Любая помощь после рассмотрения моих испытаний будет оценена по достоинству.UDP Отверстие отверстий неудачно, но тесты показывают, что он должен работать (мобильная сеть)

У меня три компьютера, мой настольный компьютер osx, мой iPhone и мой амазон ec2 ami.

на рабочем столе Я создал приложение для какао, которое использует библиотеку GCDAsyncUDPSocket для привязки порта и связи с сервером ec2, где приложение Java с использованием мини-библиотеки apache хранит сокеты внешнего ip/port и связывает их с именем пользователя переданных в полезную нагрузку.

iphone, находящийся на сети AT & T, запускает приложение, которое использует ту же библиотеку GCDAsyncUDPSocket, чтобы связаться с сервером ec2 с тем же именем пользователя, которое затем ec2 выполняет поиск имени пользователя, находит информацию о компьютерах и сообщает рабочий стол адреса iphones и iphone адреса десктопов.

теперь iphone & рабочий стол знает друг о друге, они начинают снимать пакеты друг с другом в надежде получить перфорированное отверстие.

В теории это должно сработать, но, может быть, мне не хватает чего-то о мобильных сетях, что затруднит это? Но опять же, используя простой udp-echoer на 4-м внешнем компьютере для ручного сообщения, рабочий стол тоже не работал, поэтому, возможно, его мой маршрутизатор, но я не вижу, как это может быть, поскольку все мои тесты показывают, что порт, на который обращается настольный компьютер for - это тот же самый, который назначается маршрутизатором.

Я был на этом почти две недели с небольшим прогрессом, и любые советы были бы оценены!

ответ

0

«однажды я связываю свое гнездо на моей домашней-сети, порт же к внешнему миру, как это локально»

я очень сомневаюсь. Чтобы пройти через NAT, указанные одноранговые узлы A и B, которые отправили дейтаграммы стороннему участнику: S вам нужно отправить датаграммы с A на B и наоборот, используя свои общедоступные IP-адреса, как видно по S , и их порт, как видно по S (т.е. не порт A, B связаны с их точки зрения).

+0

Это не отвечает на вопрос и должно быть комментарием. – Thomas

+0

Это может быть или не быть, но это один из возможных ответов - вот почему это не работает. Я говорю, что порт, видимый снаружи, не то же самое, и он подчеркивает, что ему нужно учитывать адрес _and port_. – markmnl