I am working on a program that needs to be able to handle firewalls eloquently while allowing direct communication between 2 clients.
I am thinking of something similar to Skype where the third party is used to establish the connection between two users, but none of the actual data is sent to the third part once the connection is established.
I understand that pretty much all firewalls block all unsolicited incoming traffic, but it is pretty easy to be able to have a program establish a connection as long as the internal program was the first to communicate out. What I don't understand is how a connection is able to be established between the two clients directly.
How can I implement something like this? Is there any proper terminology for what this technique is called? One client has to be written in Java, but the server and other client can be in pretty much any language I want.
I apologize in advance if this question has already been asked, I tried looking around, but I feel like I may not being using the correct keywords to find it.