1) вы используете частный порт
в bind () верно?
правый.
2) публичный порт назначается
брандмауэр правильно? как это порт
видимый за пределами моей локальной сети.
Ну да, но это не совсем брандмауэр. Это NAT. Конечно, NAT может быть (и чаще всего) реализован в брандмауэре, но есть также и брандмауэры, которые не используют NAT. Следует также отметить, что у вас может быть несколько уровней NAT (например, один дома и один у провайдера), в этом случае, вероятно, имеет смысл называть порт, назначенный внешним NAT, общедоступным.
3) Когда я отлаживаю между двумя
машины в моей локальной сети, я
указав оба для отправки / recv в
Частный порт, и связь работает.
Если бы я общался с
клиент вне моей сети я бы использовал
общественный порт, верно?
Это зависит от настроек сети. Поскольку вы упоминаете «клиент-сервер» в своем вопросе, я предполагаю, что клиент «подключается» (отправляет первый пакет) к серверу. Если сервер не находится за NAT, то его общедоступная пара IP / порт будет такой же, как и локальная. Но если сервер находится за NAT, вы не можете просто подключиться к нему, потому что ему еще не назначен публичный порт. Просто открытие порта не приводит к тому, что NAT назначает публичный порт, вам нужно что-то отправить с этого порта.
Так что, если ваш сервер находится за NAT, он должен действовать как клиент, а клиент должен действовать как сервер, при условии, что клиент также не находится за NAT. Если обе стороны находятся за NAT, то вам потребуется сторонний сервер без NAT для выполнения дырокола . Обратите внимание, что при использовании перфорации обычно используются как частные, так и общедоступные конечные точки на случай, если обе стороны окажутся в одной локальной сети по чистой случайности.
4) Есть ли способ для двух хостов на
локальная сеть для общения на
общественные порты? так как это то, что
это будет в режиме релиза, это
было бы хорошо убедиться, что это работает.
Это зависит от настройки NAT. Он может просто игнорировать все, что исходит из локальной сети и имеет открытый адрес NAT в качестве пункта назначения. Например, я даже не могу проверить свой собственный публичный адрес с моего домашнего компьютера.
5) будет ли маршрутизатор пересылать пакеты
отправлено в публичный порт на
листинг приложений на приват
порт? поэтому отправитель (если вне
локальная сеть) указывает на общедоступность
порт, а не частный порт.
Смотрите мой ответ на 3). Конечно, он будет пересылать пакеты, как только будет назначен публичный порт, потому что именно для этого он назначает его в первую очередь. Но он, вероятно, проверит, что входящий пакет приходит с того же адреса и порта, на который был отправлен пакет, который вызвал открытие порта, так что это действительный ответ на пакет, отправленный ранее, а не какой-то случайный хакер, пытающийся взломать в.