How do you have two programs communicate when there is a firewall in the way. I would like something sort of like socket, but that doesn't work through firewalls. It is okay if you have to use a 3rd party resource. I am doing this in python.
There are 2 possible ways:
1) UPnP / NATPMP / PCP - These are protocols implemented by some(most?) routers
   more likely local networks to allow applications behind a firewall interact
   in this case you send packets (from both clients) to their respective routers
   using the protocol mentioned above asking for a port opening, then communicate 
   regulary using sockets.
2) In some cases NAT traversal is possible - read about STUN servers and the ICE 
   protocol. - This is most common for UDP communication, though sometimes TCP 
   traffic can be also traversed in the network this way - most common tech is
   UDP hole punching
3) If none of these apply (say, symmetric NAT on a huge scale network) the only way
   would be a TURN approach when you relay all data through your publicly accesible
   server.
P2P and NAT traversal are common in SIP,Voip and torrents, hence, free libraries
like VUZE (torrent open source lib) can be a good place to start digging... :)
Have programs communicate when there is a firewall?