title: How can I open a TCP/UDP port on my NAT to configure a P2P application?
body: <p>I am developing an P2P application in Delphi XE5 with a PHP remote server as a tracker to make a list of the clients sockets. I am afraid that using <em>UDP Hole Punching</em> would fail at some point if client's NAT decides to close/block that random port it created with in the first message sent to the PHP remote server.</p>
  
  <p>So I with to know How to make a more time persistent port configuration with NAT from the Client (which is written in Delphi). I do not want my user to need to know how to access a router and configure port forwarding himself.</p>
  
  <p>Could I do that and use the server just to store the socket without the PHP-P-H and be sure that at least while the Delphi's application is running the port will remain opened?</p>
  
  <p>If I do decide to use UDP hole punching from remote server, Will the NAT maintain the port opened to user's local PC if no other users connect to it directly (P2P) soon enough?</p>
  
  <p>If I open that port with UDP, may I use TCP after?</p>
  
  <p>Obs: Delphi XE5 to compile to Windows 32 and Android, so I need a non-Windows Only solution.</p>