Creating network connections with Godot is simple — as long as you have the other party’s IP address, and there’s no NAT gateway involved. Unfortunately, that’s exactly the problem in most cases. You don’t know the other party’s IP, and these days, just about everyone is behind a combination wifi router/gateway/firewall with NAT.
Conceptually, NAT hole-punching is pretty simple, and this video explains how it’s done with just netcat.
In a nutshell:
listen on a particular port (e.g. 50001)
nc -u -l 50001
echo ‘hello’ | nc -u ipaddr 50001
echo ‘hole punch’ | nc -u -p 50001 ipaddr 50002
third party exchanges ip addresses
Putting it all together, player A (hosting a game) would require the game to connect to the directory server.
The directory server would list the game as something a player can now connect to.
player B (client who wants to join) will tell the directory service that it wants to connect, and will send its info
The directory server forwards the information to player A (host), player A will then send a packet to player B, and respond to the directory server
The directory server will then tell player B to go ahead and connect to player A.
Player B should be able to punch through to player A
With Godot, the connections from client to host would use ENetMultiplayerPeer.create_client(), which can specify the local port.
A new version of the Inventory System is available. This release includes a new structure placement feature and improves crafting. Structure Placement Players can now place structures from their inventory. When using an inventory item representing a structure, the player is prompted to select where to place it. The included demo lets players place an …
This inventory system release refines a lot of architecture guide sections based on customer feedback and adds over 100 additional pages to the PDF guide. Features: Bug fixes:
Creating a UDP peer-to-peer connection
Creating network connections with Godot is simple — as long as you have the other party’s IP address, and there’s no NAT gateway involved. Unfortunately, that’s exactly the problem in most cases. You don’t know the other party’s IP, and these days, just about everyone is behind a combination wifi router/gateway/firewall with NAT.
Conceptually, NAT hole-punching is pretty simple, and this video explains how it’s done with just netcat.
In a nutshell:
Putting it all together, player A (hosting a game) would require the game to connect to the directory server.
With Godot, the connections from client to host would use ENetMultiplayerPeer.create_client(), which can specify the local port.
Here’s an older example of a signaling server: https://github.com/Faless/gd-webrtc-signalling/tree/master
Related Posts
Inventory System v1.3 available
Another Inventory System release, and this time we’ve added support for persistence through serialization of inventory data. Features: Bug fixes:
Inventory System v1.9 available
Another quick inventory system update. The Resizable Container Demo now includes preliminary support for controllers. Features: Additional bug fixes:
Inventory System v1.18 available
A new version of the Inventory System is available. This release includes a new structure placement feature and improves crafting. Structure Placement Players can now place structures from their inventory. When using an inventory item representing a structure, the player is prompted to select where to place it. The included demo lets players place an …
Inventory System v1.15 available
This inventory system release refines a lot of architecture guide sections based on customer feedback and adds over 100 additional pages to the PDF guide. Features: Bug fixes: