Итак, я был в процессе обхода NAT.
Сценарий следующий: у меня есть два телефона Android, и я хочу соединить их (сокеты) с помощью HTTP-сервера (оба устройства находятся за NAT).
Пока все хорошо, оба клиента подключаются к HTTP-серверу, HTTP-сервер записывает их IP-адрес и порты.
однако есть небольшая проблема, поскольку я использую Java HttpDefaultClient(), он будет менять порт каждый раз, когда я отправляю запрос от клиента на сервер. Хорошо, это звучит как простая проблема: давайте просто используем Socket() для фактического поддержания действительного TCP-соединения с сервером.
общедоступный сокет (адрес InetAddress, int port, InetAddress localAddr, int localPort) выдает IOException
Я просто воспользуюсь этим классом и поставлю в локальный порт что-то случайное, что я запомню. Сейчас делаю все заново, на этот раз кажется, что порт не изменится, как я хочу.
Теперь, когда у меня есть IP и порт оппонента (он также находится за NAT), теоретически я могу разорвать соединение с СЕРВЕРОМ и использовать тот же локальный порт, который я уже использовал для фактического размещения клиентского сервера?
если, и теперь наступает часть, где у меня есть вопрос: 1) Если я отброшу сокет HTTP-сервера, поймет ли это NAT и удалит сопоставление портов? (это плохо) 2) Как на самом деле работает передача симметричного конуса nat? 3) библиотеки STUN работают как-то иначе?