I'm not sure if this would fit better under the "Programming" section or not, but i'll just put it here since it's a network-related issue. BACKGROUND: I am implementing a network feature for my little 2D game engine thingie. The goal is to make it as easy/safe to use as possible for end users/devs. In the end i just wanna be able to host directly from the application as for letting other clients join in to play and have fun. Since it's a game engine which requires speed in the network i'm doing it all in UDP. RUNDOWN: I've already made a Net class in the engine, and things are working fine when testing locally. This is what's going down when establishing a connection: - HOST starts hosting - HOST is waiting for CLIENT to connect - CLIENT starts connecting (sending a request to connect) - CLIENT is waiting for HOST to "accept" (if HOST doesn't answer within 5 seconds a timeout error will occur) - HOST receives the request from CLIENT - HOST accepts the request from CLIENT - HOST sends an "accept" message to CLIENT - CLIENT receives the accept message - CLIENT and HOST can now play and frolick in the flowery fields with eachother - SUCCESS! Things are working out perfectly locally (same pc, 2 applications running), as i've also confirmed that the constant sending/receiving works by updating player positions. THE PROBLEM: The issue begins when trying to establish a connection between me and another person (from another country). This is what's going down when trying to establish a connection (im the host): - HOST starts hosting - HOST is waiting for CLIENT to connect - CLIENT starts connecting (sending a request to connect) - CLIENT is waiting for HOST to "accept" (if HOST doesn't answer within 5 seconds a timeout error will occur) - HOST receives the request from CLIENT - HOST accepts the request from CLIENT - HOST sends an "accept" message to CLIENT - XXXXXXXXXXXXXXXXXXXX - CLIENT times out while waiting for the accept message (never seems to receive it) - FAILURE! I've confirmed that the IP is correct on all clients that i've tested with (i print out the IP just to make sure it's correct). I've port forwarded on my end, the clients haven't, and i really don't want every single client having to do that. Look at CS:S for an example, who the heck needs to port forward as a client? The host should need to do that AT MOST. When CLIENT sends a request to connect, it includes an available port from their side (the client checks for an available "receiving" port before attempting to connect) so the host knows what IP/port to connect to. I have no clue what i'm doing wrong. Does every single dingle client need to open ports on their end? In that case, how the heck does CS:S/any other multiplayer game do it? Does it make a difference if i do TCP instead of UDP? I haven't tried it yet but i'm considering it due to desperation, even if it might mean going a bit slower. I am going generally insane over this, is there a network magician out there who wouldn't mind sparing a few words of wisdom?