P2P связь не работает Java

Я пытаюсь отправить данные со своего компьютера (локальный IP) на другой компьютер (частный IP) в Интернете. Я написал Java-программу для отправки / получения сообщений с stun resolver.

Программа:

Resolve stun and get public IP and port
Send message with same socket(resolve stun) to another program.
Receiving with same socket(resolve stun) in different thread.

Мы отправляем данные на общедоступные IP-адреса / порты друг друга, разрешенные с помощью stun. Я не уверен насчет другого конца, но моя сеть имеет Port restricted clone NAT, Я делаю что-то не так?

Примечание: NAT проверен. Я общался с сервером и локальным мобильным устройством с оглушением разрешения.

редактировать

У меня нет брандмауэра. Я тоже остановился ufw оказание услуг.

система:

Ubuntu 14.04
Mac 10.10.3

2 ответа

Краткое резюме: После обнаружения вашего IP-порта / порта STUN для вашего сокета, вам нужно отправить 1-байтовый "дырокол" в IP-адрес и порт удаленной конечной точки. Это позволит входящий трафик с этого адреса. Другая сторона должна сделать то же самое.

Длинный ответ: Моя предыдущая статья о программировании сокетов P2P здесь.

Вам нужно пробить дыру в NAT обеих сторон, чтобы NAT разрешал входящие пакеты. Вы должны пробить отверстие с низким значением TTL. Так что пакет, который вы отправляете для дырокола, не достигает другой стороны NAT. Если это произойдет, то все пакеты после этого от вашего ip к этому NAT могут быть заблокированы. Не все NAT настроены так. Это может быть причиной того, что вы оба ничего не получили.

Может быть другая причина. Ваш другой NAT может быть симметричным NAT. В этом случае вам понадобится сервер TURN для установления соединения.

Также вам не нужно пробивать дыру, если NAT другой стороны является Full Cone. Так что вам действительно нужно знать тип NAT другой стороны, чтобы найти вашу проблему.

Другие вопросы по тегам