Я разрабатываю приложение P2P в Delphi XE5 с удаленным сервером PHP в качестве трекера для составления списка клиентских сокетов. Я боюсь, что использование UDP Hole Punching в какой-то момент не сработает, если клиентский NAT решит закрыть / заблокировать тот случайный порт, который он создал в первом сообщении, отправленном на удаленный сервер PHP.
Поэтому я должен знать, как сделать более постоянную конфигурацию порта с NAT от клиента (который написан на Delphi). Я не хочу, чтобы моему пользователю требовалось знать, как получить доступ к маршрутизатору и самому настраивать переадресацию портов.
Могу ли я сделать это и использовать сервер только для хранения сокета без PHP-P-H и быть уверенным, что, по крайней мере, пока приложение Delphi работает, порт останется открытым?
Если я решу использовать пробивку отверстий UDP с удаленного сервера, будет ли NAT поддерживать порт, открытый для локального ПК пользователя, если другие пользователи не подключатся к нему напрямую (P2P) достаточно скоро?
Если я открою этот порт с помощью UDP, могу ли я использовать TCP после этого?
Замечания: Delphi XE5 для компиляции в Windows 32 и Android, поэтому мне нужно решение, отличное от Windows.