Game Server is UPnP enabled. works perfectly.
Client has no UPnP protocols on their router so it requires manual port settings.
But these days most games find a way around that problem and i'm guessing they are using Hole Punching.
I've researched it a bit but it's all fuzzy to me. So maybe someone can clarify the steps needed to do a HolePunch on most networks.
currently i have: (all UDP except for the HTTP ofcourse)
Server starts, contacts master server via HTTP request and informs it "This is my port/ip/name/etc..."
Client loads and makes an HTTP request to the master server and gets the serverlist, including our target server.
Server Listens on: <Server Customized>
Server Sends To: 45,000
Client Listens On: 45,000
Client Sends To: <Server customized>
Client does HTTP request to a master server to get the target server's IP and <ServerCustomized>port (working)
The client sends UDP request to the server join the server targeting <ServerCustomized> port. (working)
Server hears the client request (working)
and replies to client listening port 45000 "yes you may join" (NOT working)
as far as i can tell, the server is sending it, but the client doesn't hear it. I say this because it works on LAN and i haven't found a UPnP enabled tester to try it with over the internet.
to hole punch, do i just need to have the client send the initial join request on both
<ServerCustomized> port and the 45000 port to punch a hole?
Q: OMG! Why are you doing hole punching?
A:Because i've already found 2/3 testers that DONT have upnp routers (eg: WANPPPConnection:1 and WANIPConnection:1).
UDP Hole Punch?
Started by waxychicken, Feb 06 2012 12:51 AM
3 replies to this topic
Ad:
#2 Members - Reputation: 162
Posted 06 February 2012 - 07:47 AM
I read something about that stuff a long time ago...
Cant you just use <ServerCustomized> for both sending and listening?
I think hole punching works like:
You have clients A and B. Both of them have a fancy NAT so they cannot connect to each other.
So, Both connect to a server C, which doesnt have a fancy NAT like that. Now C has the ports and IPs from which A and B connected to it.
Next, C tells A (or B? idk) the port of B, so that A can connect to B, because that port is already open to incoming stuff from C and thus allows connecting to it.
Something like that. I think its only needed when you want to connect 2 computers together, with both of them behind a NAT.
Go and google how it works
Cant you just use <ServerCustomized> for both sending and listening?
I think hole punching works like:
You have clients A and B. Both of them have a fancy NAT so they cannot connect to each other.
So, Both connect to a server C, which doesnt have a fancy NAT like that. Now C has the ports and IPs from which A and B connected to it.
Next, C tells A (or B? idk) the port of B, so that A can connect to B, because that port is already open to incoming stuff from C and thus allows connecting to it.
Something like that. I think its only needed when you want to connect 2 computers together, with both of them behind a NAT.
Go and google how it works
My face when i saw i have almost 1000 profile views. I feel popular among random web browsing bots.
#3 Senior Moderators - Reputation: 1617
Posted 06 February 2012 - 09:30 AM
If you have a server outside of NAT (in this case, that means with working uPnP), then you don't need NAT punch through at all.
> Client makes HTTP request to discover server IP/port
> Client make sUDP connection to server IP/port
> Server replies over the same UDP connect (i.e. the one established by the client)
UDP connections are intrinsically bi-directional, and when the client has connects to the server, you can determine the reply address from the socket.
> Client makes HTTP request to discover server IP/port
> Client make sUDP connection to server IP/port
> Server replies over the same UDP connect (i.e. the one established by the client)
UDP connections are intrinsically bi-directional, and when the client has connects to the server, you can determine the reply address from the socket.
Tristam MacDonald - swiftcoding [new blog post: bidding a freelance contract]
#4 Moderators - Reputation: 1805
Posted 06 February 2012 - 04:09 PM
Hole punching (and uPNP) is only needed when both ends of a communication are behind NATs. If one is a public server, no hole punching is needed.
When you do hole punching, you have a spearate "introducer" server that is outside a NAT, and introduces the two endpoints to each other. This is also useful for matchmaking.
The FAQ talks about UDP NAT punching, and has some links to explanations and libraries you can check out.
When you do hole punching, you have a spearate "introducer" server that is outside a NAT, and introduces the two endpoints to each other. This is also useful for matchmaking.
The FAQ talks about UDP NAT punching, and has some links to explanations and libraries you can check out.
enum Bool { True, False, FileNotFound };


















